gpt4 book ai didi

angular - 何时使用 ChangeDetectorRef( Angular )

转载 作者:行者123 更新时间:2023-12-05 08:47:54 25 4
gpt4 key购买 nike

我一直在做一个项目,我看到人们使用变化检测器。

cdRef.detectChanges()

我对何时显式使用它来标记组件已更改感到有点困惑。我们什么时候应该把它留给 Angular ?或者我在这里遗漏了什么?

最佳答案

基本上有一种叫做变化检测树的东西:它收集所有检查变化的 View

ChangeDetectorRef 允许您操作这棵树,每次有变化时 Angular 都会运行变化检测。例如,当您有大量数据并且该数据发生变化时,angular 将重新渲染 View ,如果数据每秒都在变化,您的应用程序将变得更慢。

你可以做的一件事是;使用 ref.detach()tree 中分离 View (将此 View 从变化检测树中分离),因此您可以决定何时更新 View ,以及您使用 ref.detectChanges() 在本地检测组件中的更改。

还有一个叫做 ChangeDetectionStrategy 的东西,当你的组件中有 @Inputs 时,它就会发挥作用。如果您在组件中使用 changeDetection: ChangeDetectionStrategy.OnPush,angular 只会检查一次。

Use the CheckOnce strategy, meaning that automatic change detection is deactivated until reactivated by setting the strategy to Default (CheckAlways). Change detection can still be explicitly invoked. This strategy applies to all child directives and cannot be overridden.

使用这个,angular 迫使我们使用不可变对象(immutable对象),所以如果你想更新 View ,你必须将一个新对象传递给你的@Input。但是,如果您有一个每次单击按钮时都希望更新的内部状态,那么会发生什么......除非您明确调用更改检测,否则它将无法工作。

因此您可以尝试 ref.detectChanges() 对组件及其子组件运行变更检测,或者尝试 ref.markForCheck() 不触发变更检测,而是它会将所有 onPush 祖先标记为被检查一次。

Check the docs for more info .

关于angular - 何时使用 ChangeDetectorRef( Angular ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66819852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com