這個錯誤表示某個 Field 執行個體已不再與目前的模型結構相連。當某個先前存在的欄位路徑無法再解析為父物件中的同一個屬性時,Angular 訊號表單就會拋出 NG01902。
常見的觸發原因是,不小心把某個欄位的值設成了 undefined。在訊號表單中,undefined 代表「欄位不存在」,因此既有的欄位可能會變成孤立狀態。
發生原因
訊號表單會讓欄位執行個體與你的模型形狀保持同步。如果模型形狀改變之後,程式碼仍參考著舊的欄位執行個體,Angular 就會偵測到不一致並拋出這個錯誤。
發生時機包括:
- 某個屬性被從模型物件中移除
- 某個屬性變成了
undefined,而不是保持存在 - 程式碼在結構性更新之間一直持有過時的欄位參考
如何修復
- 避免將
undefined寫入模型欄位。當欄位應該繼續存在時,請改用null或其他明確的值。 - 在欄位使用期間,讓模型形狀保持穩定。
- 結構性更新之後,請從目前的表單樹重新讀取欄位,不要重複使用過時的參考。
模型設計方面的指引,請參閱避免使用 undefined。