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

时间:2017-07-24 16:48:44

标签: javascript angular angular2-changedetection

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

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

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

1 个答案:

答案 0 :(得分: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