动态组件加载器 - 无法读取未定义的 属性 'viewContainerRef'
Dynamic component loader - Cannot read property 'viewContainerRef' of undefined
我正在按照 Angular.io 上的广告横幅教程的所有步骤进行操作。但是在所有设置结束后,我从这个组件和函数中得到一个错误:
广告-banner.component TS
loadComponent() {
this.currentAdIndex = (this.currentAdIndex + 1) % this.ads.length;
const adItem = this.ads[this.currentAdIndex];
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(adItem.component);
const viewContainerRef = this.adHost.viewContainerRef; ---->ERROR comes from this Line
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
(<AdComponent>componentRef.instance).data = adItem.data;
}
我正确地获取了日志,英雄数据进入了我将显示广告的主页组件,但没有出现错误,所以有人可以解决我的问题吗?
编辑
主要指令
import { Directive, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[ad-host]'
})
export class AdDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
您的组件 HTML 应该是:-
<div class="ad-banner-example">
<h3>Advertisements</h3>
<ng-template ad-host></ng-template>
</div>
你的组件 Ts 应该有:-
@ViewChild(AdDirective, {static: true}) adHost: AdDirective;
您的 AdhostDirective 应该在您的模块声明中。
你应该调用 this.loadComponent();在 ngoninit.
我正在按照 Angular.io 上的广告横幅教程的所有步骤进行操作。但是在所有设置结束后,我从这个组件和函数中得到一个错误:
广告-banner.component TS
loadComponent() {
this.currentAdIndex = (this.currentAdIndex + 1) % this.ads.length;
const adItem = this.ads[this.currentAdIndex];
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(adItem.component);
const viewContainerRef = this.adHost.viewContainerRef; ---->ERROR comes from this Line
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
(<AdComponent>componentRef.instance).data = adItem.data;
}
我正确地获取了日志,英雄数据进入了我将显示广告的主页组件,但没有出现错误,所以有人可以解决我的问题吗?
编辑 主要指令
import { Directive, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[ad-host]'
})
export class AdDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
您的组件 HTML 应该是:-
<div class="ad-banner-example">
<h3>Advertisements</h3>
<ng-template ad-host></ng-template>
</div>
你的组件 Ts 应该有:-
@ViewChild(AdDirective, {static: true}) adHost: AdDirective;
您的 AdhostDirective 应该在您的模块声明中。
你应该调用 this.loadComponent();在 ngoninit.