我正在使用angular4并且有一个动态加载的组件。我想实现ChangeDetectionStrategy.OnPush策略,但即使我知道输入对象是全新的,它似乎也不起作用。我知道正常的变化检测不适用于动态加载的组件,但有没有办法以编程方式推送更改,以便ChangeDetectionStrategy.OnPush将检测到更改?
简单回答,没有。
答案很长(对不起,我的英语不太好),当你的组件在模板中使用时,@Input
s的自动更改检测就会被连线。 Angular编译它并构建一个组件工厂,其中包含处理此更改检测的代码。
如果要使用动态组件,则@Input
s不再用于绑定其模板中的组件。
但是...... @Input
s只是组件的公共属性,因此您仍然可以访问和修改它们。但是变化检测不会检测到它。
我看到两个解决方案:
没有像angular4这样的东西。有角度,有版本号https://angular.io/presskit。是的,有办法。将ChangeDetectorRef
类的实例添加到组件中,并在要检测更改时运行其detectChanges()
方法。这是一个你可以通过阅读文档来回答的问题......