Моя цель - создать дочерний компонент и вставить в шаблон родительского компонента. Есть примеры для этого. Тем не менее, я создаю шаблон родительского компонента (DOM Elements) динамически в родительском компоненте, тогда как большинство примеров, показанных статически, создают шаблон с элементом захвата.Угловая 2: динамическая установка элемента захвата при создании компонентов (динамически)
Вот код
app.component
import {Component, ViewChild, ViewContainerRef, ComponentFactoryResolver} from '@angular/core';
import {NewChildComponent} from "./newChild.component";
@Component({
selector: 'app-main',
templateUrl: 'app.component.html'
})
export class AppComponent {
@ViewChild('captureElement', {read: ViewContainerRef})
captureElement: ViewContainerRef;
constructor (private componentFactoryResolver: ComponentFactoryResolver) {
var childComponent = this.componentFactoryResolver.resolveComponentFactory(NewChildComponent);
var myArea = document.getElementById('myArea');
var myRow = document.createElement("div");
myArea.appendChild(myRow);
//I want to add the capture element #myCapture as a child of myRow
//Add something like this <div #captureElement></div> programmatically through JS/TS
// How can I do this?
// I then create the component
this.parent.createComponent(NewChildComponent);
}
app.component.html
<div id="myArea">
<!-- Static way of doing it -->
<!--<div #captureElement></div>-->
</div>
Вместо статически определения в #captureElement
, где будет вставлена ребенок компонент, я хотел бы для его динамического создания в родительском компоненте и сделать его дочерним компонентом.
Вот список вопросов, которые я говорил прежде, чем я задал этот вопрос
- Angular2: Insert a dynamic component as child of a container in the DOM
- How to place a dynamic component in a container
- Angular 2 dynamic tabs with user-click chosen components
Пробовал пару вещей
- Попробовал создать элемент
div
с#captureElement
как атрибут программно, но это не сработает. - Пытался создать случайный элемент программным путем и использовать
ViewContainerRef
, чтобы его найти. Это тоже не работает.
Спасибо большое! Где этот класс «HtmlContainer» собирается сидеть? Я имею в виду, какой компонент? – am3
Я создал «HtmlContainer» в качестве вспомогательных классов, и он отлично работал. Еще раз спасибо. Можно ли вам подробно рассказать о том, что делает класс «HtmlContainer»? – am3
Спасибо. Как я могу поддерживать динамические компоненты, чтобы удалить их? Пробовал поддерживать объект, который хранил ссылку на 'componentRef.instance' в' addComponent' каждый раз, когда создавался новый динамический компонент. Вызов '.destroy()' на этом действительно не работает. Есть лучший способ сделать это? – am3