相关疑难解决方法(0)

Angular markForCheck 与 detectChanges

我将从我在 StackOverflow 上看到一个类似问题的概念开始这个问题,但那个问题只回答了差异

我要问的是我应该根据情况使用什么以及一种或另一种方法可能有哪些缺点

我知道detectChanges在一个元素及其子元素上运行即时更改检测周期,同时markForCheck只将当前元素及其祖先标记为脏,并且应该在下一个更改检测周期中检查它们。

我问这个主要是因为我觉得我不应该总是markForCheck在异步调用中使用。

例如,我有一个InputComponent它是常规 HTML 输入的包装器。这InputComponentChangeDetectionStrategy.OnPush启用。

当我对服务器进行异步调用并获取数据时,我需要对其运行更改检测InputComponent以更新选项列表,我有两个选项。

首先(我觉得我应该使用的)是detectChanges因为它只会对这个确切的组件应用检查,同时markForCheck会导致检查整个树枝。

那么我应该使用什么,我需要使用markForCheck什么,为什么?

performance typescript angular angular-changedetection

7
推荐指数
1
解决办法
3732
查看次数

有角。为什么调用markForCheck()结果来查看更新

到处都说 markForCheck 只是将当前组件视图和所有父组件(直到根组件)标记为脏组件。因此下次执行 DetectChanges 时它将更新视图。从这一点上我有两个问题。两者都在该组件具有的上下文中changeDetection: ChangeDetectionStrategy.OnPush

1)如果“async pipeline”除了调用markForCheck(源代码)什么都不做,为什么视图会更新?

2)如果我尝试在某个异步进程中调用markForCheck,视图也会更新。

演示:stackblitz

您能帮助我了解这些过程中发生的情况以及视图实际更新的原因吗?我期待有人在 1) 和 2) 之后调用 DetectChanges 方法,但是谁......

angular angular-changedetection

6
推荐指数
1
解决办法
3904
查看次数