2016-02-29 17 views
6

używam DynamicComponentLoader załadować składnik dzieci i produkuje następujące HTML:kątowa 2 - Jak ustawić atrybut id do dynamicznie załadowanego składnika

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

i oto jak wczytuję składnika w rodzic

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

Jak mogę dodać atrybut id do komponentu dziecko tak, że produkuje następujące HTML:

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

Odpowiedz

8

Jeśli to możliwe chciałbym dodać pole do ChildComponent i wiążą id do niego:

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

Zobacz także http://plnkr.co/edit/ihb7dzRlz1DO5piUvoXw?p=preview#

Bardziej hacky sposób byłoby

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

Zamiast dostępu do wniosku nativeElement Właściwości bezpośrednio powinno być możliwe to samo z Renderer.

+0

co robi host: {'attr.id': 'id'}? – Nick

+0

Ustawia atrybut 'id' dla znacznika' 'na wartość' this.id'. –

+0

Ale składnia w odpowiedzi jest błędna (poprawna w Plunker), ale 'attr.' jest nadmiarowa, ponieważ' it' jest właściwością dowolnego elementu i jest automatycznie odzwierciedlana w atrybucie 'id'. Zaktualizowałem moją odpowiedź. –

Powiązane problemy