2016-08-01 46 views
1

我正在構建一個角度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(); 
} 

文本,選項和選擇輸入被更新,但複選框保持不變。沒有錯誤或警告。我已經搜索了很多類似的問題,但沒有發現類似的問題或解決方案。

我錯過了一些明顯的東西嗎?還是有人有同樣的問題,並希望分享他們的解決方案?

謝謝!

回答

0

通過在創建控件組之前更改值解決了這個問題(在此之前可以更改這些值(例如x.value))。它解決了我的問題,但未解決動態更改爲複選框窗體的事實控件不反映在DOM元素中。