这是因为一些非常有趣和有力的东西叫区域。如果这个概念对您来说是新的,请参阅here和here以获得很好的解释。
正如你可以看到那里,
应用程序状态的变化是由三个因素引起:
1)活动 - 用户的事件,如点击,改变,输入,提交,...
2 )XMLHttpRequests - 例如从远程服务 计时器获取数据时 -
3)的setTimeout(),setInterval的(),因为JavaScript的
......事实证明,这是唯一的情况下,当角实际上是 有意更新视图。
这就是为什么当您滚动时视图没有被更新,但是当您触摸页面的任何元素(因为它是用户事件)时,它会执行此操作。
为了解决这个问题,其中一个选择是让Angular知道它需要知道您即将做出的一些更改,因为事情可能需要更新。你可以做到这一点的运行区间内的一些代码(即更新x
属性的代码),就像这样:
import { Component, NgZone } from '@angular/core';
@Component({...})
export class MyPage {
constructor(..., private ngZone: NgZone) {}
public yourMethod(): void {
this.ngZone.run(() => {
// Update the x property here, and the view will be updated!
});
}
}
感谢您的回答,区域真的帮助了我。如果我理解正确的区域,它只是一个功能列表的胶囊。区域确保在离开区域之前所有被调用的函数?但是为什么不使用承诺并将函数与堆叠呢? 'promise.then(..)。然后(..)'。我认为scrollin是一个事件... – R3Tech
关键是区域不仅用于确保某些方法将要执行的顺序,区域是允许角度说_ok的包装,做所有事情你需要在幕后进行,并让我知道何时需要检查更改并更新view_。这是一个非常强大的概念,因为它也可以用来改善应用程序的性能,通过在区域外面做事情(并且因此使它们对Angular不可见),正如你可以阅读[这里](https:// blog。虽然tram.io/angular/2017/02/21/using-zones-in-angular-for-better-performance.html) – sebaferreras
阅读和学习 - 谢谢你。真的很酷的概念 – R3Tech