2017-11-07 9 views
5

私はAngular 4プロジェクトに取り組んでいます。私はフォームコントロール配列の変更を検出する必要があります。例えば私はプロバイダの名前のフォームコントロールの配列を、その変更を検出する方法はありますか?Angular 4のフォームコントロールアレイの変更を検出する方法は?

export class CustomFormArray { 
public form: FormGroup; 

constructor(private _fb: FormBuilder) { 
     this.form = _fb.group({ 
      providers: _fb.array([]) 
     }); 
    } 
} 
+0

です。 –

+0

あなたはそれを説明できますか? –

+0

プロバイダの要素は何ですか? –

答えて

2

FormArrayAbstractControlを拡張するので、chanesを発するvalueChanges性質を有しています。テンプレートで

this.form = this.fb.group({ 
    providers: this.fb.array([]), 
}); 
(this.form.get('providers') as FormArray).push(new FormControl('', Validators.required)); 
(this.form.get('providers') as FormArray).push(new FormControl('', Validators.required)); 

(this.form.get('providers') as FormArray).valueChanges.subscribe(values => { 
    console.log(values); 
}); 

<input *ngFor="let field of form.controls.providers.controls;" [formControl]="field"> 

各入力フィールドの値を持つ配列を返すであろう購読にvaluesときに変更(文法またはUIから)のいずれか。

FormArrayFormGroupがある場合は何も変わりません。次のコンポーネントコードを使用してください。

(this.form.get('providers') as FormArray).push(this.fb.group({ 
     'name': '', 
     'age': '' 
    })); 

とテンプレートになります。

<div *ngFor="let field of form.controls.providers.controls;" [formGroup]="field"> 
    <input formControlName="name" placeholder="name"> 
    <input formControlName="age" placeholder="age"> 
</div> 

ここにあなたがそれを検出するために、別のグループとしてのプロバイダの配列の内部の要素を登録する必要がありplunker

+0

私はこれを試していました。フォームコントロールの場合は正常に動作しますが、フォームコントロールアレイの変更は検出されません。なぜ驚きですか? –

+0

私の答えは今更新されました。 'valueChanges'はFormArrayにあり、正常に動作しています。あなたの問題の詳細を教えてください – user1533603

+0

はい、私は説明します、私はプロバイダーフォームのコントロール配列を持っています。実行時にプロバイダを変更すると、インデックス0のプロバイダのレコードが格納されます。そのインデックスを削除し、新しいプロバイダの詳細で再作成します。しかし、私の問題は、valueChangesはこの配列の変更を検出しないということです。私もあなたの更新されたコードを試しました。しかし、同じ問題が存在する。 –

0

通常のフォームグループの場合と似ていますが、フォーム配列のフォームグループを初期化するたびに、フォーム配列のフォームグループをemit/subscribe変更イベントだけにします。

ここはサンプルです。

export class CustomFormArray { 
    public form: FormGroup; 

    constructor(private _fb: FormBuilder) { 
      this.form = _fb.group({ 
       providers: _fb.array([]) 
      }); 

     this.providers.push(this.createprovidersFormGroup()) 
     } 

    createprovidersFormGroup(){ 
      let form = this._formBuilder.group({ 
         abc: "abc" 


        }); 

       form.valueChanges.subscribe(data => { 
        console.log('Form changes', data) 
       }); 

     return form; 
     } 
+0

私はすでにこれを試しています。しかし、フォームコントロール配列 –

+0

の場合、valueChangesは機能しません。もし私がtheresの例外を知っているかもしれませんか? – i3lai3la

関連する問題