changeDetection 中函数 checkAndUpdateDirectiveInline 的工作原理

Workings of the function checkAndUpdateDirectiveInline in changeDetection

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

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

Would really appreciate if you could expound on the reason for the multiple 'if' conditions used in the function

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

how the function determines when and which lifecycle hook to call.

def.flags is a bitmask,它为钩子设置了某些位:

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,

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