changeDetection

时间:2018-11-07 11:15:07

标签: angular angular6 angular2-changedetection angular7

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

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

1 个答案:

答案 0 :(得分:1)

  

如果您能阐明造成这种情况的原因,我们将不胜感激。   函数中使用了多个“ if”条件

多个if条件只是下面checkAndUpdateDirectiveDynamic函数的内联版本。过去,这是一种更快的实现方式,现在还不确定。

  

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

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,

由编译器设置,编译器检查在编译过程中是否在组件类上实现了方法。语句def.flags & NodeFlags.DoCheck只是检查是否设置了位。