angular - changeDetection 中函数 checkAndUpdateDirectiveInline 的工作原理
问题描述
我试图了解 Angular 中的 changeDetection,但无法通过 provider.ts 中的函数checkAndUpdateDirectiveInline。源代码在这里 。如果您能解释函数中使用多个“if”条件的原因以及函数如何确定何时以及调用哪个生命周期挂钩,将不胜感激。例如,该函数的以下摘录对我来说意义不大:
if (def.flags & NodeFlags.DoCheck) {
directive.ngDoCheck();
}
解决方案
如果您能解释函数中使用多个“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
仅检查是否设置了位。
推荐阅读
- javascript - 我的提交按钮没有将我发送到下一页
- reactjs - 如何在全局错误上触发 Sentry.io ErrorBoundary 回退
- kotlin - 背压在 flatMap 和多个 observeOn 的链中不受尊重
- python - 如何将元素放在一行中的np数组中的特定位置
- css - 当字体中缺少给定的字形、字符、符号、dingbat 等时,Web 浏览器如何处理这种情况?
- python - 在某个 X 刻度值处开始水平 pyqtgraph 的 LinearRegionItem
- assembly - 错误 A2105:预期:指令或指令 - MASM
- java - 如何在android开源项目中找到特定屏幕的代码?
- javascript - 使用 Express.js 和 TypeScript 从 Node.js 下载文件
- python - 如何获取元组元组的第一项