2016-09-02 23 views
6

Hiện tại tôi đang tải một số thành phần của mình động với đoạn mã này.Góc 2: Tải thành phần động với các tham số @Input và @Output

export class ComponentOutlet { 

    constructor(
     private vcRef: ViewContainerRef, 
     private compiler: Compiler, 
     private dataService: DataService 
    ) { } 

    private _createDynamicComponent() { 

     // Some logic to decide which component should be loaded 
     return MyComponent; 
    } 


    ngOnChanges() { 

     this.compiler.compileComponentAsync(this._createDynamicComponent()) 
      .then(factory => { 
       const injector = ReflectiveInjector.fromResolvedProviders([], this.vcRef.parentInjector); 
       this.vcRef.clear(); 
       this.vcRef.createComponent(factory, 0, injector); 
      }); 
    } 

Vấn đề là có một số MyComponent@InputOutput bindings. Có thể thiết lập các ràng buộc này ở đây không? Làm thế nào tôi có thể đạt được điều đó?

+0

Với RC6 + hiện nay là '.compileComponentAsync' .. đánh dấu vào một tùy chọn ở đây http://stackoverflow.com/q/38888008/1679310 * (còn với đầu vào liên kết) * –

+0

@ RadimKöhler 'compileComponentAsync' đã bị xóa trong RC6. Với RC6 + bây giờ có 'compileModuleAndAllComponentsAsync' – yurzui

+0

@yurzui, đúng .. đó là những gì tôi đang nói –

Trả lời

7

Chỉ có thể sử dụng các kết nối vào đầu vào và đầu ra cho các thành phần được thêm tĩnh vào mẫu thành phần khác.

Trong trường hợp của bạn, bạn có thể làm điều đó phải nhất thiết như

var cmpRef = this.vcRef.createComponent(factory, 0, injector); 
cmpRef.instance.someInput = value; 
cmpRef.instance.someOutput.subscribe(data => this.data = data); 
+1

Liệu ngOnChanges() của cá thể được kích hoạt bởi Angular khi thêm đầu vào? Đối với tôi nó không. Tôi phải gọi cmpRef.instance.ngOnChanges() theo cách thủ công. –

+2

Không, 'ngOnChanges()' được gọi khi 'someProp' thay đổi với' [someInput] = "someProp" '. Không có một 'ngOnChanges' ràng buộc như vậy sẽ không được gọi. Bạn có thể đặt 'someInput' thành setter và đặt mã ở đó. –

+0

@ GünterZöchbauer Trong trường hợp này chúng ta biết đầu vào của thành phần được tạo động và cung cấp đầu vào như nhu cầu thành phần. Vậy điều gì sẽ xảy ra nếu chúng ta tạo ra các thành phần động khác nhau theo tham số và mỗi thành phần động cần các đầu vào khác nhau? Nên có một cách có hệ thống để truyền các tham số đầu vào từ cha mẹ sang con. – omeralper

Các vấn đề liên quan