2016-12-16 17 views
2

爲什麼我一直得到這個錯誤?我認爲我做的一切都對嗎?FormArray TypeError:value.forEach不是函數

「例外:未捕獲(在承諾):類型錯誤:value.forEach不是函數 類型錯誤:value.forEach不在FormArray.setValue一個函數」

組件類:

jobDetails: FormGroup; 
techFormArray: FormArray; 

constructor(private formBuilder: FormBuilder){ 

    this.techFormArray = new FormArray([ 
     new FormControl(''), 
     new FormControl(''), 
     new FormControl('') 
    ]); 
    this.jobDetails = this.formBuilder.group({ 
     techs: this.formBuilder.array([]) 
    }); 
    this.jobDetails.setValue({ 
     techs: this.techFormArray 
    }); 
} 

HTML:

<form [formGroup]="jobDetails"> 
    <div formArrayName="techs" > 
    <div style="display: flex; flex-direction: column"> 
     <div *ngFor="let tech of techFormArray.controls; let i=index"> 
     <md-checkbox [formControlName]="i"> 
      {{i}} 
     </md-checkbox> 
     </div> 
    </div> 
    </div> 
</form> 

SOLUTION:

FunStuff有正確的,我不能使用setValue ....所以我刪除它。問題解決了哈哈。我改變了幾件事情,我不確定我做了什麼,它幾乎是幾個小時的暴力試驗和錯誤,但後來它工作! :)

這是工作版本!

jobDetails: FormGroup; 

constructor(private formBuilder: FormBuilder){ 

    this.jobDetails = formBuilder.group({ 
     techs: formBuilder.array([ 
      formBuilder.control(''), 
      formBuilder.control('') 
     ]) 
    }); 
} 

新的HTML:

<form [formGroup]="jobDetails"> 
     <div formArrayName="techs" > 
      <div style="display: flex; flex-direction: column"> 
       <div *ngFor="let tech of jobDetails.controls.techs.controls; let i=index"> 
        <md-checkbox [formControlName]="i"> 
         {{i}} 
        </md-checkbox> 
       </div> 
      </div> 
     </div> 
    </form> 
+0

分別是代碼中的每個功能..一些,你試圖控制.value.foreach funtion – mayur

+0

這樣的東西: - 'this.techFormArray.value.forEach(()=> {/ ** /}' – mayur

+0

這是導致錯誤的組件。沒有告訴它使用循環,但我認爲FunStuff的答案可能是爲什麼。我今天會看看。 – Jus10

回答

5

的setValue方法只接受簡單的價值觀:

this.techFormArray = new FormArray([ 
     new FormControl(''), 
     new FormControl(''), 
     new FormControl('') 
    ]); 

    this.jobDetails = this.formBuilder.group({ 
     techs: this.techFormArray 
    }); 

    this.jobDetails.setValue({ 
     techs: ['a', 'b', 'c'] 
    }); 
+0

對不起,我不認爲它很重要,所以我沒有包括它,但在這種情況下,我扔了三個模擬值,實際上我實際上並不知道這些值。我想根據需要將它們推入陣列中。如果我們不知道數組的大小,我們如何設置值? – Jus10

+0

只需推新的FormControl。 this.techFormArray.push(新的FormControl('')) – Bazinga

+0

@FunStuff你可以解釋一下,this.techFormArray.push(新的FormControl('')) –