【发布时间】:2018-04-21 16:49:13
【问题描述】:
采用角度特征动态添加组件。
我需要帮助,所以我们直接在页面上显示广告列表,而不是一个接一个地显示。
我认为这就像在 ng-template 元素上添加 *ngFor 一样简单,但它似乎比这更复杂。
我对 angular 2 比较陌生,因此我们将不胜感激。
【问题讨论】:
标签: angular dynamic components
采用角度特征动态添加组件。
我需要帮助,所以我们直接在页面上显示广告列表,而不是一个接一个地显示。
我认为这就像在 ng-template 元素上添加 *ngFor 一样简单,但它似乎比这更复杂。
我对 angular 2 比较陌生,因此我们将不胜感激。
【问题讨论】:
标签: angular dynamic components
把 loadComponent 函数改成这样:
loadComponent() {
let viewContainerRef = this.adHost.viewContainerRef;
for (const ad of this.ads) {
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(ad.component);
let componentRef = viewContainerRef.createComponent(componentFactory);
(<AdComponent>componentRef.instance).data = ad.data;
}
}
viewContainer 一个接一个地插入视图。
编辑:
关于抛出的错误。最好有一段代码。 这是对问题的更彻底的解释: https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4
import { ChangeDetectorRef, (...) } from '@angular/core';
constructor(
private cd: ChangeDetectorRef,
private componentFactoryResolver: ComponentFactoryResolver
) { }
ngAfterViewInit() {
this.loadComponent();
this.getAds();
this.cd.detectChanges();
}
【讨论】:
componentRef.location.nativeElement.addEventListener( 'click', this.execItemClicked.bind( this, item ) ); 绑定了点击事件我使用了一个 BehaviorSubject 将更改从父级传输到子级,并且所有内容都按应有的方式更新!