ExpressionChangedAfterItHasBeenCheckedError解釋請向我解釋為什么我一直收到這個錯誤: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.顯然,我只是在開發模式下獲得它,它不會在我的生產版本中發生,但它非常煩人,而我根本不理解在我的開發環境中出現錯誤的好處 - 這些錯誤不會出現在prod上 - - 可能是因為我缺乏理解。通常,修復很容易,我只是將錯誤導致代碼包裝在setTimeout中,如下所示:setTimeout(()=> {
this.isLoading = true;}, 0);或者使用如下構造函數強制檢測更改constructor(private cd: ChangeDetectorRef) {}::this.isLoading = true;this.cd.detectChanges();但為什么我經常遇到這個錯誤?我想了解它,以便將來可以避免這些hacky修復。
3 回答

慕容森
TA貢獻1853條經驗 獲得超18個贊
此錯誤表示應用程序中存在實際問題,因此拋出異常是有意義的。
在devMode
更改檢測中,在每次常規更改檢測運行后添加一個額外的轉彎,以檢查模型是否已更改。
如果模型在常規和附加變化檢測轉彎之間發生了變化,則表明這兩者之一
變化檢測本身已經引起了變化
每次調用時,方法或getter都會返回不同的值
哪些都不好,因為不清楚如何繼續,因為模型可能永遠不會穩定。
如果Angular運行更改檢測直到模型穩定,它可能會永遠運行。如果Angular未運行更改檢測,則視圖可能不會反映模型的當前狀態。
- 3 回答
- 0 關注
- 2189 瀏覽
添加回答
舉報
0/150
提交
取消