代码之家  ›  专栏  ›  技术社区  ›  nintschger

不同的Changedectionstrategy.OnPush嵌入式和ng内容儿童的行为

  •  0
  • nintschger  · 技术社区  · 6 年前

    我正在调整应用程序的性能,并遇到以下差异。请看 the stackblitz 以现场为例。

    带有后缀的组件 -on-push ChangeDetectionStrategy.OnPush -default 有默认策略。

    我有两种方法,第一种是“嵌入式”,第二种是“ngcontent”。澄清如下。

    根模板:

    <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。

    期望

    因为组件 只有当输入引用发生变化时才会被检查(组件本身及其子组件),我的期望是对组件本身及其子组件进行更改检测 这两种方法都可以触发,称为嵌入方法和内容投影方法。

    现实

    应用程序嵌入默认值 不会被触发。 ng含量 ),的子组件的更改检测 推送应用程序ng内容 触发,正如你在上面的stackblitz上看到的。

    0 回复  |  直到 4 年前
        1
  •  3
  •   yurzui    6 年前

    事实是正确的,因为如果我们看一下模板:

    <app-ng-content-on-push>
      <app-ng-content-default></app-ng-content-default>
    </app-ng-content-on-push>
    

    我们不能这么说 app-ng-content-default app-ng-content-on-push 但是这个组件被投射到 .

    推送应用程序ng内容 保护不了 从检查。