2017-07-08 5 views
0

をアレイ状に値を設定するために、私はこのような配列に値を設定したい:どの角度

this.form.controls[name].setValue('name') 

が、私はのインデックスを渡した場合でも、私は配列形式で働いています、これは動作していませんespecific配列形式

例えばこれは私のフォームの配列であると私がやりたい機能に

user: FormGroup; 
    users: FormGroup; 

    constructor(private fb: FormBuilder) {} 
    ngOnInit() { 
    this.user = this.buildGroup(); 
    this.users = this.fb.group({ 
     data: this.fb.array([this.user]) 
    }); 
    } 
    get fData() { 
    return this.users.get('data') as FormArray; 
    } 
    buildGroup() { 
    return this.fb.group({ 
     name: ['', [Validators.required, Validators.minLength(2)]], 
     account: this.fb.group({ 
     email: ['', Validators.required], 
     confirm: ['', Validators.required] 
     }) 
    }); 
    } 
setValue(index) { 
    this.fData[index].controls[name].setValue('name') 
    } 
    onSubmit() { 
    this.fData.push(this.buildGroup()); 
    const {valid, value} = this.fData; 
    console.log(valid, value); 
    } 

を値を設定することですが、this.fData [インデックス] .controls [名前] .setValue( '名前')これは動作していません

+0

私の以前の答えをスクラップします。この問題は、[配列をsetValueに渡す](https://angular.io/api/forms/FormArray#example-1)ではない可能性が高いです。 – Tom

+0

インデックスを特定の配列形式に渡すべきではありませんか?私はこれをtryngしていますが、これは動作していませんsetValue(index){ this.fData.setValue(['Name']); } fomコントロールの名前に 'name'という名前の値を指定する必要があります。 – LLaza

+0

これを試してください:this.fData [index] .controls ['name']。setValue(['name']) ' – Tom

答えて

3

アレイの場合は、setControlを使用する必要があります。

this.productForm = this.fb.group({ 
     productName: ['', [Validators.required, 
          Validators.minLength(3), 
          Validators.maxLength(50)]], 
     productCode: ['', Validators.required], 
     starRating: ['', NumberValidators.range(1, 5)], 
     tags: this.fb.array([]), 
     description: '' 
    }); 

    ... 

    // Update the data on the form 
    this.productForm.patchValue({ 
     productName: this.product.productName, 
     productCode: this.product.productCode, 
     starRating: this.product.starRating, 
     description: this.product.description 
    }); 
    this.productForm.setControl('tags', this.fb.array(this.product.tags || [])); 
+0

私はあなたのpluralsightコースでそれを逃したに違いありません;-) – Tom

+1

それを見つけました:https://app.pluralsight.com/player?course=angular-2-reactive-forms&author=deborah-kurata&name =角2反応性フォーム-m8&クリップ= 5&モード=ライブ&スタート= 348.941 – Tom

+0

「角度:反応型」コース?それが助けてくれることを願って! – DeborahK

0

ここで私は値を手動でformArrayの特定のフォームコントロールに設定してくれて、私のために働いています。私はbundleDetailsという名前のformArrayを持っています。

this.formBuilderObj['bundleDetails'] = 
    this.formBuilder.array([this.createBundleItem()]); 

    createBundleItem(): FormGroup { 
    return this.formBuilder.group({ 
    bsku: ['', Validators.required], 
    bqty: ['', Validators.required], 
    bprice: ['', Validators.required] 
    }); 
    } 

(インデックスは、HTMLファイルから[formGroupName]="i"渡される)bskuコントロールの値を設定する方法。

setSku(sku: string, index: number) { 
    const faControl = 
    (<FormArray>this.pmForm.controls['bundleDetails']).at(index); 
    faControl['controls'].bsku.setValue(sku); 
    } 

これが役に立ちます。ハッピーコーディング。