Angular2: вставка динамического компонента в качестве дочернего элемента контейнера в DOM
Есть ли способ динамически вставить компонент в видеребенок (не родственник) тега DOM в Angular 2?
Существует множество примеров того, как вставить динамический компонент в качестве родственного элемента данногоViewContainerRef
Тег, как (на 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);
});
}
}
Но это создает DOM, похожий на:
<div></div>
<my-dynamic-component></my-dynamic-component>
Ожидаемый результат:
<div>
<my-dynamic-component></my-dynamic-component>
</div>
С использованиемSomeComponent
«sViewContainerRef
имеет тот же результат, он по-прежнему вставляет сгенерированный компонент как родственный, а не дочерний элемент. Я был бы в порядке с решением, где шаблон пуст и динамические компоненты вставлены в шаблон (в теге выбора компонента).
Структура DOM очень важна при использовании таких библиотек, как ng2-dragula, для перетаскивания из списка динамических компонентов ивоспользоваться обновлениями модели, Дополнительный элемент div находится в списке перетаскиваемых элементов, но за пределами модели, что нарушает логику перетаскивания.
Некоторые говорят, что это невозможно (c.f. этот комментарий), но это звучит как очень удивительное ограничение.