angular - 通过 ComponentFactoryResolver 创建组件时更改检测不起作用

标签 angular input components angular2-directives

我有一个组件,使用 ComponentFactoryResolver 创建另一个组件。它似乎工作正常,我可以通过@Input 访问数据。问题是 ngOnChanges 在组件启动或数据更改时永远不会被调用。但是,如果我使用 HTML 中的选择器以正常方式创建组件,它确实会触发。这不是动态的,所以我只剩下 ComponentFactoryResolver。这是正常行为吗?

我的父组件有它的输入:

@ViewChild( MyDirective ) myHost: MyDirective;

然后它创建子组件,其输入如下:

@Input('key') key: String;
@Input('index') index: number;

我正在创建这样的组件:

let item = new Item(ItemDropdownComponent, this.key, 0);
let componentFactory = this._componentFactoryResolver.resolveComponentFactory(item.component);
let viewContainerRef = this.myHost.viewContainerRef;
viewContainerRef.clear();
let componentRef = viewContainerRef.createComponent(componentFactory);
(<ItemInterfaceComponent>componentRef.instance).key = item.key;
(<ItemInterfaceComponent>componentRef.instance).index = item.index;

最佳答案

这是预期的行为。 不过,您可以显式调用更改检测

componentRef.changeDetectorRef.detectChanges();

关于angular - 通过 ComponentFactoryResolver 创建组件时更改检测不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43112685/

相关文章:

angular 2 - 在 TestComponent 上找不到指令注释

node.js - Angular 9 SSR 404 未找到带有状态代码的页面

angular - 如何使用 msbuild 从 dotnetcore web-api 项目中触发 "ng build",但将 Angular 项目保存在单独的文件夹中?

Html Css 更改日期输入高亮颜色

webpack - 无法读取未定义的 vue 的属性 'post'

delphi - 如何在不使用外部 DLL 或运行时的情况下压缩和加密大文件?

vector - 具有 32 位向量的 VHDL OR 逻辑

css - 从 Angular 组件内更改 body css

css - 仅删除搜索字段周围的边框

html - 使用 yii2 设置自动完成输入?