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
只是检查位是否已设置。
我试图了解 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
只是检查位是否已设置。