我正在構建一個角度2(2.0.0-rc.4)應用程序與新的窗體API(2.0.2),我有一個問題,當我試圖使用updateValue()更新複選框表單控件。Angular 2,動態表單; updateValue()不更新複選框窗體控件
這是我做了什麼:
我已經建立了新形式的API(基於食譜的部分:)動態形式。我已經擴展了表單類也處理複選框:
export class FormControlCheckbox extends FormBase <string> {
controlType: string;
options: { key: string, value: string, checked: boolean } [] = [];
checked: boolean = false;
constructor(options: {} = {}) {
super(options);
this.controlType = "checkbox";
this.options = options['options'] || [];
this.checked = this.options[0].checked;
}
}
這是它看起來在創建時它像:
new FormControlCheckbox({
type: "checkbox",
label: 'A label',
name: "a-name",
value: "",
description: "a description",
options: [
{
label: 'A label',
name: "a-name",
checked: false
}
],
})
當應用程序被加載控件創建並組合在一起的形式,一切正常,表格按預期提交。我只有做一個變通方法上做出變化和標記的複選框被更新如下:
<input [formControlName]="control.key" [(ngModel)]="control.checked" [id]="control.key" [type]="control.controlType" [attr.checked]="control.checked ? true : null" [value] = "control.checked" (change)="control.checked = $event.target.checked">
我也試過這個標記(它也能正常工作):
<input [formControlName]="control.key" [(ngModel)]="control.checked" [id]="control.key" [type]="control.controlType" [attr.checked]="control.checked ? true : null" [value] = "control.checked" (change)="control.checked = check.checked" #check>
這是我的問題發生的地方
我添加了一個功能,當窗體剛剛被加載(用戶應該能夠重新訪問頁面並更新以前的值)時更新控件值。下面的代碼更新所有的控制值。
for (var key in new_values) {
//the form control keys are the same as the key in the list of new_values
this.form.controls[key].updateValue(new_values[key]); //works for text, select and option
this.form.controls[key].updateValueAndValidity(); //not sure if needed?
this.form.controls[key].markAsDirty();
}
文本,選項和選擇輸入被更新,但複選框保持不變。沒有錯誤或警告。我已經搜索了很多類似的問題,但沒有發現類似的問題或解決方案。
我錯過了一些明顯的東西嗎?還是有人有同樣的問題,並希望分享他們的解決方案?
謝謝!