2016-02-29 27 views
6

Sto usando DynamicComponentLoader per caricare il componente figlio e produce il seguente codice HTML:angolare 2 - Come impostare l'attributo id alla componente caricato dinamicamente

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

ed ecco come sto caricando il componente nel genitore

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

Come posso aggiungere l'attributo id per il componente figlio in modo che esso produce il seguente codice HTML:

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

risposta

8

Se possibile vorrei aggiungere un campo per ChildComponent e legare id ad esso:

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

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

Un modo più hacky sarebbe

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

di accesso a prop. nativeElement direttamente, dovrebbe essere possibile fare lo stesso con Renderer.

+0

cosa fa l'host: {'attr.id': 'id'} do? – Nick

+0

Imposta l'attributo 'id' del tag' 'sul valore di' this.id'. –

+0

Ma la sintassi nella risposta è sbagliata (corretta nel Plunker) ma 'attr' è ridondante perché' it' è una proprietà su qualsiasi elemento e viene riflessa automaticamente nell'attributo 'id'. Aggiornato la mia risposta. –

Problemi correlati