我正在以这种方式动态创建一个组件:
let componentFactory = this._componentFactoryResolver.resolveComponentFactory(this.component);
this.componentRef = this.viewContainerRef.createComponent(componentFactory);
this.componentRef.instance.text = this.text;
如您所见,我还为“文本”属性分配了一个值。这项工作是可行的,但它不会触发目标组件中的 ngOnChanges,因此也不会触发更改检测(我采用“推送”策略)。
我试图手动触发它
this.componentRef.changeDetectorRef.detectChanges();
和
this.componentRef.changeDetectorRef.markForCheck();
但没有成功。
任何想法如何以更好的方式将新文本值分配给目标组件@Input('text')?文本只是一个字符串值。
更新: 我现在已经在目标组件中使用 setter 构建了一个工作:
@Input('text')
set text(text: string) {
this._text = text;
this.cdRef.markForCheck();
}
它有效,但这有点hacky,我仍然更喜欢更“有角度”的方式。