![]() |
1
2
我将试着解释现在发生的事情以及为什么不建议这样做以及一种替代方法。
以上是一个
状态
值可变的属性
异步地
由
https://www.joshmorony.com/understanding-zones-and-change-detection-in-ionic-2-angular-2/ 你的例子是有效的,因为你在一个角度区域内创造了承诺。当您在一个区域内并创建一个异步侦听器时,Angular将模拟修补该操作,以便在异步操作完成时进行角度更改检测。
所以上面的代码行是在一个区域内执行的,当异步完成时,angular将遍历所有组件视图,以查看是否有任何更改。然后它将呈现任何脏的组件。
你肯定不会做出反应,我也不能说我喜欢这个角度。 开箱即用的角度不需要了解视图、区域和更改检测的工作原理。您可以这样做并快速创建一个可工作的应用程序,但它不能 规模 更大的应用程序。当您从组件中添加越来越多的视图时,更改检测会减慢并开始延迟。
我们称之为
技术债务
因为如果应用程序的大小增加,那么您必须返回并重构要使用的内容
https://netbasal.com/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4 作为一个反应开发者。你已经 斑点的 这很早,只是 感觉 错了,但你不明白为什么,我认为这真的说明了为什么反应变得如此流行。它从一开始就不允许问题存在,从而解决了角度上的一个重要问题。
所以建议的方法是
现在我们可以更好地回答你的问题了。当异步操作更改时,如何更新视图? 将视图标记为“脏”可以将changeDetectRef类注入组件,然后将视图标记为脏视图。 https://angular.io/api/core/ChangeDetectorRef#markforcheck 当反应式编程需要重构源代码,或者根本不能使用反应式编程时,这是迄今为止最简单的解决方案。
您只需在代码中添加一行,这将告诉Angular组件是脏的。
我不会说这一方法是最佳实践,但这是你将如何使它与
异步反应式编程
反应式编程允许您使用
https://angular.io/api/common/AsyncPipe
其优点是管道句柄将视图标记为脏视图。因此,您可以创建一个使用
您的模板将变成:
然后,该属性将是一个可观测的,发出真/假值。有很多方法可以转换您的
|