2016-02-29 11 views
6

I DynamicComponentLoader bin mit dem Kind Komponente zu laden und erzeugt die folgende html setzen:Angular 2 - Wie id-Attribut auf die dynamisch geladene Komponente

<child-component> Child content here </child-component> 

und hier ist, wie ich das Laden der Komponente in der Eltern

ngAfterViewInit(){ 
     this._loader.loadIntoLocation(ChildComponent,this._elementRef,'child'); 
    } 

Wie kann ich so das id-Attribut für das Kind Komponente hinzufügen, dass es die folgenden hTML erzeugt:

<child-component id="someId" > Child content here </child-component> 

Antwort

8

Wenn möglich, dass ich ein Feld ChildComponent und binden möchte hinzufügen id es:

@Component({ 
    selector: 'child-component', 
    host: {'[id]': 'id'} 
}) 
class ChildComonent { 
    id:string; 
} 
this._loader.loadIntoLocation(ChildComponent,this._elementRef,'child') 
.then(cmp => cmp.instance.id = 'someId'); 

Siehe http://plnkr.co/edit/ihb7dzRlz1DO5piUvoXw?p=preview#

auch ein hacky Weg

this.dcl.loadIntoLocation(Dynamic, this.ref, 'child').then((cmp) => { 
    cmp.location.nativeElement.id = 'someId'; 
}); 

wäre statt Zugriff auf nativeElement prop Es sollte möglich sein, das gleiche mit Renderer zu tun.

+0

Was macht der Host: {'attr.id': 'id'}? – Nick

+0

Es setzt das 'id' Attribut des' 'Tags auf den Wert von' this.id'. –

+0

Aber die Syntax in der Antwort ist falsch (korrekt im Plunker), aber 'attr.' ist überflüssig, weil' it' eine Eigenschaft für ein beliebiges Element ist und automatisch in das Attribut 'id' reflektiert wird. Meine Antwort wurde aktualisiert. –

Verwandte Themen