动态加载的组件不适用于ChangeDetectionStrategy.OnPush

时间:2018-03-01 23:12:39

标签: angular typescript

我使用angular4并且有一个动态加载的组件。我想实现ChangeDetectionStrategy.OnPush策略,但即使我知道输入对象是全新的,它似乎也无法工作。我知道正常的变化检测不适用于动态加载的组件,但有没有办法以编程方式推送更改,以便ChangeDetectionStrategy.OnPush检测到更改?

2 个答案:

答案 0 :(得分:2)

简单回答,不。

长答案(对不起,我的英语不太好),当您的组件在模板中使用时,@Input的自动更改检测已连线。 Angular编译它并构建一个组件工厂,其中包含处理此更改检测的代码。

如果要使用动态组件,@Input不再用于绑定其模板中的组件。

但是...... @Input只是组件的公共属性,因此您仍然可以访问和修改它们。但变化检测无法检测到它。

我看到两个解决方案:

  • 当您知道有一些更改时,您可以手动运行更改检测器。
  • 您可以使用setter而不是direct属性,并在这些setter中触发更改检测器。

答案 1 :(得分:0)

没有angular4这样的东西。有角度,版本号https://angular.io/presskit。是的,有办法。如果要检测更改,请将ChangeDetectorRef类的实例添加到组件并运行其detectChanges()方法。通过阅读文档可以回答这个问题......