首页 > 解决方案 > changeDetection 中函数 checkAndUpdateDirectiveInline 的工作原理

问题描述

我试图了解 Angular 中的 changeDetection,但无法通过 provider.ts 中的函数checkAndUpdateDirectiveInline。源代码在这里 。如果您能解释函数中使用多个“if”条件的原因以及函数如何确定何时以及调用哪个生命周期挂钩,将不胜感激。例如,该函数的以下摘录对我来说意义不大:

if (def.flags & NodeFlags.DoCheck) {
    directive.ngDoCheck();
  }

标签: angularangular6angular2-changedetectionangular7

解决方案


如果您能解释函数中使用多个“if”条件的原因,将不胜感激

多个if条件只是checkAndUpdateDirectiveDynamic下面函数的内联版本。它曾经是一个更快的实现,现在不确定。

函数如何确定何时以及调用哪个生命周期钩子。

def.flags 是一个位掩码,它为钩子设置了某些位:

export const enum NodeFlags {
  ...
  OnInit = 1 << 16,
  OnDestroy = 1 << 17,
  DoCheck = 1 << 18,
  OnChanges = 1 << 19,
  AfterContentInit = 1 << 20,
  AfterContentChecked = 1 << 21,
  AfterViewInit = 1 << 22,
  AfterViewChecked = 1 << 23,

它由编译器设置,它检查编译期间是否在组件类上实现了方法。该语句def.flags & NodeFlags.DoCheck仅检查是否设置了位。


推荐阅读