- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
说, - 有一个父组件 A 和一个子组件 B。
在组件B上设置OnPush。
有一刻,B 的一个不是输入绑定(bind)属性的属性发生变化,我想检测该变化并相应地更新 View 。
根据我的理解,应该有2个选项。
在B上实现ngDoCheck钩子(Hook)并调用markForCheck方法,因为我们都知道属性的变化触发了A组件的变化检测流程,在此过程中,B中的ngDoCheck会被调用并且 markForCheck 将标记到 A(在本例中为根)的路径,以便尽管使用 OnPush 策略也可以触发其变化检测。
在属性更改时刻之后立即调用 detectChanges,这会自行解释。
在我看来,两者都应该有效,但我想知道哪种方法更合适。
最佳答案
出于某种原因,选项 2 不起作用。
选项 1 (markForCheck) 是解决此问题的方法。我正在对此进行一些研究,并随时向您发布调查结果!
谢谢。
关于Angular2+ 变化检测 : markForCheck or detectChanges?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47724616/
我将从以下概念开始这个问题:我在 StackOverflow 上看到了一个类似的问题,但该问题只回答了差异。 我想问的是我应该根据情况使用什么以及一种或另一种方法可能有什么缺点。 我知道 detect
说, - 有一个父组件 A 和一个子组件 B。 在组件B上设置OnPush。 有一刻,B 的一个不是输入绑定(bind)属性的属性发生变化,我想检测该变化并相应地更新 View 。 根据我的理解,应该
很明显,我们主要需要使用 markForCheck() 和 OnPush 策略来标记组件进行 CD 检查,但是 我想弄清楚为什么只检查一个分支: 为什么可以为整个应用或仅特定组件运行 CD,不是吗
一般 我有一个问题。如果不调用 changeDetectorRef.markForCheck 方法,我的组件不会重新呈现。 我有一个自动完成功能。当输入更改时,我发送一些异步请求(只是简单的 Http
ChangeDetectorRef.markForCheck()有什么区别和 ChangeDetectorRef.detectChanges() ? 我只有found information on S
我不太明白为什么我需要在下面的代码中添加 markForCheck() 以使更改可见。为什么我的 @Input() 没有触发更改检测? 我正在将我的项目重构为 OnPush。这两个组件都启用了 OnP
我正在阅读 this文章中包含有关何时使用的部分 markForChange() . 在他的例子中,他有以下组件: @Component({ selector: 'cart-badge', t
到处都说 markForCheck 只是将当前组件 View 和所有父组件(直到根组件)标记为脏。所以下次 DetectChanges 执行时它会更新 View 。 从这一点上我有两个问题。两者都在组
无法获得 Angular Material 步进器。步进器显示按照要求,当单击标题时正在移动,但出现错误并显示: Cannot read property markForCheck of undefi
我的应用程序组件正在订阅商店选择。我将 ChangeDetectionStrategy 设置为 OnPush。我一直在阅读有关其工作原理的信息;需要更新对象引用以触发更改。但是,当您使用异步管道时,A
我正在阅读有关 Zone.JS 和 Angular 更改检测过程的信息,在代码源中,Zone.JS 通知 Angular 有关更改并通过将检查传播到所有组件从上到下在第一个组件中运行验证,但在我的测试
我有一个一般的 Angular 问题: 为什么 Angular async管道使用cdr.markForCheck()而不是 cdr.detectChanges() ? 我看到这两种“风格”有两个主要
我想知道使用一个相对于另一个的优势或劣势是什么: constructor(private app:ApplicationRef, private ref:ChangeDetectorRef) {
我是一名优秀的程序员,十分优秀!