我的角度應用程式只有復選框和單選按鈕。我想在用戶弄臟任何欄位時觸發事件。目前以下 if 條件稱為偶數值已由程式本身更改。我使用了感動和原始的屬性,但它總是給我錯誤
this.myForm.valueChanges.subscribe(data => {
if (this.myForm.dirty) {
console.log('form is dirty');
}
});
uj5u.com熱心網友回復:
嘗試使用以下選項并且它有效。emitEvent false 將更改表單值,也不會自動觸發臟事件。
this.myForm.reset({},{
emitEvent: false,
});
uj5u.com熱心網友回復:
如果您希望能夠忽略以編程方式更改值的應用程式,您可以在設定控制元件的值時傳入一個引數。
這是一個例子
control = new FormControl('');
constructor() {
this.control.valueChanges.subscribe(() => console.log('Control has changed value'));
}
updateValue() {
this.control.setValue(Math.random().toString(36).slice(2), { emitEvent: false });
}
uj5u.com熱心網友回復:
嘗試distinctUntilChanged這樣使用。
this.myForm.valueChanges.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) ===
JSON.stringify(b)))
.subscribe(changes => { console.log('The form changed!'); });
JSON stringify 是必需的,因為默認情況下它只進行參考比較。這樣,代碼只會在新值與原始值不同時觸發。
參考 SO 帖子:FormControl.detectchanges - 為什么使用 distinctUntilChanged?
這是一個stackblitz,它表明這只在更改表單控制元件時觸發,這驗證了這是一個可接受的解決方案:https ://stackblitz.com/edit/angular-zena7t?file=src/app/app.component.html
您可以點擊changes變數以查看更改的確切內容。這樣,如果更改了不同的輸入,您還可以設定不同的行為。盡管如果出于某種原因您確實想觸發代碼更改并且不讓它導致發出值,那么按照MGX 在他們的答案中顯示的那樣進行操作,盡管那時我會問您為什么要覆寫其默認行為發出價值變化?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510394.html
標籤:有角度的形式
上一篇:需要將表單資料添加到CSV檔案,但輸入值中的PHP陣列被識別為字串
下一篇:HTML表單動作相對路徑錯誤
