我试图了解Angular中的changeDetection,但无法超越provider.ts中的功能 checkAndUpdateDirectiveInline 。源代码here 。如果您能详细说明该函数中使用多个“ if”条件的原因以及该函数如何确定何时以及调用哪个生命周期挂钩,将不胜感激。例如,该函数的以下摘录对我说的并不多:
if (def.flags & NodeFlags.DoCheck) {
directive.ngDoCheck();
}
答案 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
只是检查是否设置了位。