2

は、私はこのエラーを取得します値がありません。つまり、undefinednullまたは空のです、のようなもの:2角度に設定することはできませんフォームの配列値

[ 
    { 
    email: '[email protected]', 
    role: 1 
    }, 
    { 
    email: '[email protected]', 
    role: 2 
    } 
] 

その後eventSubscriptionsetValueライン上のアプリがクラッシュします。

なぜこれが起こっているのかわかりません。

アイデア?

答えて

0

コントロールでフォーム配列を初期化します。それは問題を解決するだろう。方法を知る必要がある場合は、Reactive Formsガイドを参照してください。 ngModelを使用している場合は、それを削除する価値があります。

1

値を設定する前に、フォームOnInitをビルドする必要があります。

settingsForm: FormGroup; 

buildForm(): void { 
    settingsForm: FormGroup = this.fb.group({ 
     //content of settingsForm 
    }) 
} 

ngOnInit() { 
    this.buildForm(); 
    this.eventSubscription = this.af.database.object('/events/' + this.eventId) 
    //... 
    this.settingsForm.setValue({ //you can try .patchValue to set only available value 
     //... 
    }) 
} 
+0

に役立つと思います。あなたはon initフックでそれをする必要はありません。 – Chrillewoodz

+0

私は似たような問題を抱えていましたが、これで解決しました。私はそれが同じ問題だと思っていた:(。この[ブログ投稿](https://toddmotto.com/angular-2-form-controls-patch-value-set-value)をチェックしましたか?存在する場合、AngularはObject.keysループに移動しますが、まず_throwIfControlMissingを介してその値のコントロールが欠落していることを確認します: " – mickdev

+1

フォームグループが不足しているため、すべてのオブジェクトをループしなければならなかった新しいグループをそれぞれフォームアレイにプッシュしてください。ちょっとした迷惑なデザイン選択。 – Chrillewoodz

0

私は、このコードは、私はすぐにやっているまさにだ

import { FormArray, FormBuilder, FormGroup} from '@angular/forms'; 

export class SomeComponent implements OnInit { 

consutructor(public fb:FormBuilder) { } 

    public buildcollaboratorsGroup(fb:FormBuilder):FormGroup { 
     return fb.group({ 
          email:'', 
          role:'' 
       }); 
    } 

ngOnInit() { 
    public settingsForm: FormGroup = this.fb.group({ 
    collaborators:this.fb.array([this.buildcollaboratorsGroup(this.fb)]) 
    });  

    this.setFormArrayValue(); 
} 


    // I am trying set only one value if it's multiple use foreach   
    public setFormArrayValue() { 
     const controlArray = <FormArray> this.settingsForm.get('collaborators'); 
     controlArray.controls[0].get('email').setValue('[email protected]'); 
     controlArray.controls[0].get('role').setValue(2); 
    } 

    // I am trying remove only one value if it's multiple use foreach   
    public removeFormArrayValue() { 
     const controlArray = <FormArray> this.settingsForm.get('collaborators'); 
      controlArray.removeAt(0);   
    } 
} 
関連する問題