C'è un modo per inserire dinamicamente un componente come figlio (non fratello) di un tag DOM in Angular 2?Angular2: inserire un componente dinamico come figlio di un contenitore nel DOM
Ci sono molti esempi lì intorno per inserire una componente dinamica come un fratello di un determinato tag ViewContainerRef
s', come (a partire da RC3):
@Component({
selector: '...',
template: '<div #placeholder></div>'
})
export class SomeComponent {
@ViewChild('placeholder', {read: ViewContainerRef}) placeholder;
constructor(private componentResolver: ComponentResolver) {}
ngAfterViewInit() {
this.componentResolver.resolveComponent(MyDynamicComponent).then((factory) => {
this.componentRef = this.placeholder.createComponent(factory);
});
}
}
Ma questo genera un DOM simile a:
<div></div>
<my-dynamic-component></my-dynamic-component>
risultato atteso:
<div>
<my-dynamic-component></my-dynamic-component>
</div>
Il ViewContainerRef
diha lo stesso risultato, sta ancora inserendo il componente generato come fratello e non come figlio. Sarei a posto con una soluzione in cui il modello è vuoto e i componenti dinamici sono inseriti nel modello (all'interno del tag di selezione dei componenti).
La struttura DOM è molto importante quando si utilizzano librerie come ng2-dragula per trascinare da un elenco di componenti dinamici e benefit from the model updates. Il div extra è nella lista degli elementi trascinabili, ma al di fuori del modello, rompendo la resistenza di trascinamento &.
Alcuni dicono che non è possibile (c.f. this comment), ma suona come una limitazione molto sorprendente.
Vedi https: // GitHub .com/angular/angular/issues/9035 –
Grazie per la risposta rapida e il link utile! @pkozlowski ha dato la risposta alla mia domanda su questa discussione: usa '' invece di '
'. – AntoineAvete una soluzione che funzionerà anche su direttiva? poiché questo è per il componente – AngularOne