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

问题描述 投票:1回答:2

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

angular typescript
2个回答
2
投票

简单回答,没有。

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

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

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

我看到两个解决方案:

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.