2

我正在以这种方式动态创建一个组件:

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,我仍然更喜欢更“有角度”的方式。

4

0 回答 0