2016-09-02 18 views
6

ile yükle Bileşenlerimden bazılarını bu kod parçasıyla dinamik olarak yüklüyorum.Köşeli 2: Bileşeni dinamik olarak @ Giriş ve @ Çıkış

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); 
      }); 
    } 

sorun MyComponent bazı @Input ve Output bağlamaları olmasıdır. Bu bağlamaları burada ayarlamak mümkün mü? Bunu nasıl başarabilirim?

+0

gibi yapmak + 'şimdi .compileComponentAsync' var .. burada bir seçenek http://stackoverflow.com/q/38888008/1679310 kontrol edebilirsiniz bindings girişi ile) * –

+0

@ RadimKöhler 'compileComponentAsync 'RC6'da kaldırıldı. RC6 + ile şimdi "compileModuleAndAllComponentsAsync" – yurzui

+0

@yurzui, doğru .. bu demek istediğim –

cevap

7

Girdi ve çıktılara yapılan bağlamalar, yalnızca başka bir bileşenin şablonuna statik olarak eklenmiş olan bileşenler için kullanılabilir. Senin durumunda

de (* imperatively RC6 ile

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

Örneğin ngOnChanges() giriş eklerken Angular tarafından tetikleniyor mu? Benim için öyle değil. Elle cmpRef.instance.ngOnChanges() çağırmak zorundayım. –

+2

Hayır, 'nPOnChanges()', '' someProp' '' [someInput] = "someProp" 'ile değiştiğinde çağrılır. Böyle bir bağlayıcı olmadan 'ngOnChanges' çağrılmayacak. Bazı girişleri 'ayarlayabilir ve kodu buraya koyabilirsiniz. –

+0

@ GünterZöchbauer Bu durumda, dinamik olarak oluşturulmuş bileşenin girdilerini biliyoruz ve bileşen ihtiyaçlarını girdi olarak veriyoruz. Öyleyse, eğer bir parametre olarak farklı dinamik bileşenler yaratırsak ve her bir dinamik bileşen farklı girdilere ihtiyaç duyarsa ne olur? Giriş parametrelerini ebeveynten çocuğa geçirmenin sistematik bir yolu olmalıdır. – omeralper

İlgili konular