我正在调整应用程序的性能并遇到以下差异。请参阅stackblitz以获取实时示例。
带有后缀的组件-on-push
有ChangeDetectionStrategy.OnPush
,而带有后缀的组件-default
有默认策略。
我有两种方法,我将第一种方法命名为“嵌入式”,将第二种方法命名为“ng-content”。澄清如下。
根模板:
<h1>embedded</h1>
<app-embedded-on-push></app-embedded-on-push>
<h1>ng-content</h1>
<app-ng-content-on-push>
<app-ng-content-default></app-ng-content-default>
</app-ng-content-on-push>
其中app-embedded-on-push
s 模板只是“嵌入”了app-embedded-default
组件:
<app-embedded-default></app-embedded-default>
另一方面,app-ng-content-on-push
s 模板将app-ng-content-default
组件投影为ng-content
:
<ng-content></ng-content>
请查看 stackblitz 以获得更好的想法。
期待
由于ChangeDetectionStrategy.OnPush
只有在输入引用发生更改时才检查组件(组件本身及其子级),我的期望是在组件本身及其子级上,更改检测不会被两种方法触发,命名为嵌入和内容投影方法。
现实
使用嵌入式方法,行为符合预期,app-embedded-default
不会触发更改检测。另一方面,通过内容ng-content
投影(app-ng-content-on-push
有人可以解释为什么这是结果行为吗?两种方法的组件树都是相同的,还是我错了?