這是因爲一些非常有趣和有力的東西叫區域。如果這個概念對您來說是新的,請參閱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