有没有一种方法可以停止视图更改,直到代码块完成?

时间:2019-10-04 14:06:48

标签: angular

我有两条导致视图改变的陈述:

statement1; // changes a databinding
statement2; // is an asynchronous call which does several changes

我希望将两个更改同时应用于视图。当前statement1完成,在statement2仍在处理时将其更改应用于视图。因此,从statement1看到的更改在可见的几毫秒之前就可见了,这看起来不太好。有没有办法在两个语句都完成之前停止视图更改?

2 个答案:

答案 0 :(得分:1)

您可以考虑暂时从角度变化检测中分离视图。

  1. 在组件中注入ChangeDetectorRef

constructor(private changeDetectorRef: ChangeDetectorRef) { }

  1. 在您的statement1之前禁用更改检测,并在statement2完成后重新启用它。
this.changeDetectorRef.detach();

statement1; // changes a databinding

statement2; // is an asynchronous call which does several changes

this.changeDetectorRef.reattach();

https://angular.io/api/core/ChangeDetectorRef#detach

答案 1 :(得分:0)

听起来,您需要使用解析器来获取语句2的信息。一旦获得了语句2的信息,那么您将想要转到该路由并显示语句1和2的信息

https://angular.io/guide/router#resolve-guard

如果您不想在转到新路由之前等待语句2,则需要使两个语句都异步,并等待显示语句1的结果,直到语句2完成为止。