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

慕容森
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
此錯(cuò)誤表示應(yīng)用程序中存在實(shí)際問題,因此拋出異常是有意義的。
在devMode
更改檢測中,在每次常規(guī)更改檢測運(yùn)行后添加一個(gè)額外的轉(zhuǎn)彎,以檢查模型是否已更改。
如果模型在常規(guī)和附加變化檢測轉(zhuǎn)彎之間發(fā)生了變化,則表明這兩者之一
變化檢測本身已經(jīng)引起了變化
每次調(diào)用時(shí),方法或getter都會(huì)返回不同的值
哪些都不好,因?yàn)椴磺宄绾卫^續(xù),因?yàn)槟P涂赡苡肋h(yuǎn)不會(huì)穩(wěn)定。
如果Angular運(yùn)行更改檢測直到模型穩(wěn)定,它可能會(huì)永遠(yuǎn)運(yùn)行。如果Angular未運(yùn)行更改檢測,則視圖可能不會(huì)反映模型的當(dāng)前狀態(tài)。
另請參閱Angular2中的生產(chǎn)和開發(fā)模式有何區(qū)別?
- 3 回答
- 0 關(guān)注
- 2183 瀏覽
添加回答
舉報(bào)
0/150
提交
取消