是的,如果您動態實例化組件,則可以將DOM元素傳遞給組件創建方法。此DOM元素將充當新創建組件的主機。 但是,您必須手動觸發更改檢測。通過引入門戶主機,Angular CDK解決了這個問題。
這裏是基本的例子:
@Component({
selector: 'a-comp',
template: `<h2>I am {{name}}</h2>`
})
export class AComponent {
name = 'A component';
}
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
`,
})
export class AppComponent {
name = `Angular! v${VERSION.full}`;
componentRef;
constructor(r: ComponentFactoryResolver, i: Injector) {
const someDOMElement = document.querySelector('.host');
const f = r.resolveComponentFactory(AComponent);
this.componentRef = f.create(i, [], someDOMElement);
}
ngDoCheck() {
this.componentRef.changeDetectorRef.detectChanges();
}
}
Here is的plunker。
你可以閱讀一下這篇文章中動態組件:
更廣泛的答案是,這一切都依賴於第三方庫進行實施。如果開發人員爲自定義模板設置了配置,則可以提供新的DOM元素。 –