Czy istnieje sposób dynamicznego wstawiania komponentu jako dziecko (a nie jako rodzeństwo) znacznika DOM w Angular 2?Angular2: Wstaw komponent dynamiczny jako element potomny kontenera w DOM
Istnieje wiele przykładów wokół tam wstawić dynamiczny składnik jako rodzeństwo danego tagu ViewContainerRef
„s, jak (od 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);
});
}
}
Ale to generuje DOM podobny do:
<div></div>
<my-dynamic-component></my-dynamic-component>
Oczekiwany wynik:
<div>
<my-dynamic-component></my-dynamic-component>
</div>
Przy użyciu tego samego wyniku, ViewContainerRef
, nadal wstawia wygenerowany komponent jako siostrzeniec, a nie dziecko. Byłbym w porządku z rozwiązaniem, w którym szablon jest pusty, a komponenty dynamiczne są wstawiane do szablonu (w znaczniku wyboru komponentu).
Struktura DOM jest bardzo ważna podczas korzystania z bibliotek takich jak ng2-dragula do przeciągania z listy dynamicznych komponentów i benefit from the model updates. Dodatkowy div znajduje się na liście elementów przeciągalnych, ale poza modelem, łamiąc logikę kropli &.
Niektórzy mówią, że nie jest to możliwe (c.f. this comment), ale brzmi to jak bardzo zaskakujące ograniczenie.
Zobacz https: // github .pl/angle/angle/issues/9035 –
Dzięki za szybką odpowiedź i użyteczny link! @pkozlowski udzielił odpowiedzi na moje pytanie w tej dyskusji: użyj '' zamiast '
'. – AntoineCzy masz rozwiązanie, które będzie działać również w sprawie dyrektywy? ponieważ jest to komponent – AngularOne