首页 文章

更改检测过程以及确切时间检查OnPush属性

提问于
浏览
1

https://hackernoon.com/everything-you-need-to-know-about-change-detection-in-angular-8006c51d206f

他说angular有14个操作,但确切的时候检查组件是否为ChecksEnabled == false(OnPush),特别是如果它是OnPush,它检查某些@Input属性是否已更改为在其中运行进程?继续检查DOM并调用所需的生命周期?

如果该值是一个新引用,它将仅对@Input的值的属性或绑定中的所有属性运行检查?同意我,如果他只是检查该元素的值绑定,它会更具性能吗?

1 回答

  • 1

    在哪个时刻检查组件是否为ChecksEnabled == false(OnPush)

    当Angular运行子视图检查时,就会发生这种情况:

    • 运行子视图的更改检测(重复此列表中的步骤)

    这是相关代码:

    function callViewAction(view: ViewData, action: ViewAction) {
      const viewState = view.state;
      switch (action) {
        ...
        case ViewAction.CheckAndUpdate:
          if ((viewState & ViewState.Destroyed) === 0) {
            if ((viewState & ViewState.CatDetectChanges) === ViewState.CatDetectChanges) {
              checkAndUpdateView(view);
            } else if (viewState & ViewState.CheckProjectedViews) {
              execProjectedViewsAction(view, ViewAction.CheckAndUpdateProjectedViews);
            }
          }
          break;
    

    它在什么时候检查某些@Input属性已更改为在其中运行进程

    这是为此步骤执行的:

    • 更新子组件/指令实例的输入属性

    要了解更多信息,请阅读The mechanics of property bindings update in Angular

    继续检查DOM并调用所需的生命周期?

    这将在以下情况下完成:

    如果当前视图组件实例上的属性发生更改,

    • 将更新当前视图的DOM插值和绑定

    要了解更多,请阅读The mechanics of DOM updates in Angular

相关问题