我正在學習Angular4更具體的反應形式。我正在運行英雄演示,並且遇到了一些問題。如何將Angular4的FormGroup重置爲原始狀態?
對此Plunker我們必須選擇一個超級英雄,它會顯示英雄的地址。我爲每個地址添加了一個重置按鈕,但是當我點擊重置地址時,它會重置所有內容。
在這個例子中,我們有:
createForm() { //Set up form and array of addresses
this.heroForm = this.fb.group({
name: '',
secretLairs: this.fb.array([]),
power: '',
sidekick: ''
});
}
//Function to revert changes
revert() { this.ngOnChanges(); }
//This function will set the name from original object
ngOnChanges() {
this.heroForm.reset({
name: this.hero.name
});
//It will reload the form array with original values
this.setAddresses(this.hero.addresses);
}
//Create new formgroups and add to formArray
setAddresses(addresses: Address[]) {
const addressFGs = addresses.map(address => this.fb.group(address));
const addressFormArray = this.fb.array(addressFGs);
this.heroForm.setControl('secretLairs', addressFormArray);
}
這是確定的,它的工作原理,但它會重置整個表格。例如,Whirlwind有兩個地址。我添加了一個新地址,之後,我對第一個地址進行了更改。我犯了一個錯誤,想要獲得原始值,我點擊重置按鈕,它將刪除我的新地址,並且它將重置表單上的所有數據。
如何重新設置每個地址而不是整個表單?
感謝
見你爲什麼要呼籲改變復位?我不確定我是否理解你想達到的目標。用例如類似的用戶故事呢?發生了什麼,你期望發生什麼? –
我很抱歉,如果它錯過了什麼。我想取消所做的更改並加載以前的值。例如,它加載第一個地址,然後我開始在那裏輸入內容。當我點擊重置時,它將顯示該特定地址的原始值,而不是整個表單。 – UncleFester