2017-11-07 367 views
5

Angular 4 projesinde çalışıyorum. Form kontrol dizisinin değişikliklerini tespit etme ihtiyacım var. Örneğin. Sağlayıcılar adlı bir form kontrol dizim var, bu değişiklikleri nasıl algılayacağım?Angular 4'te form kontrol dizisindeki değişiklikler nasıl algılanır?

export class CustomFormArray { 
public form: FormGroup; 

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

olduğunu. –

+0

bunu açıklayabilir misiniz? –

+0

Sağlayıcıların öğesi nedir? –

cevap

2

FormArrayAbstractControl böylece Chanes yayar valueChanges özelliği uzanır. Şablonunuzda

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"> 

her giriş alanının değerine sahip bir dizi döndürür abone içinde values zaman değişiklikler (dilbilgisi veya UI) herhangi biri olabilir.

FormGroup'da FormArray olması durumunda hiçbir değişiklik yapılmaz. sadece aşağıdaki bileşen kodunu kullanın.

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

ve şablon olacaktır: Burada

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

Bunu tespit etmek için başka bir grup olarak sağlayıcıları dizinin eleman içinde kaydetmeniz gerekir plunker

+0

Bunu denedim. Form denetimi durumunda iyi çalışır, ancak form kontrol dizisindeki değişiklikleri algılamaz. Şaşırtıcı mıyım? –

+0

Cevabımı şimdi güncelledim 'valueChanges' FormArray üzerindedir ve gayet iyi çalışıyor. Sorununuz hakkında daha fazla bilgi verir misiniz – user1533603

+0

Evet, bir sağlayıcıların kontrol dizisi oluşturduğunu açıklayacağım. çalışma zamanında sağlayıcıyı değiştirdiğimde 0. dizinindeki bir sağlayıcının kaydını içerir. Dizini kaldırır ve yeni sağlayıcı ayrıntılarıyla yeniden oluşturur. Ama benim sorunum, bu dizideki değişikliklerin değeri değiştirmemesidir. Ayrıca güncellenmiş kodunuzu da denedim. Ama aynı sorun var. –

0

Normal form grubu için yaptığınız gibi benzer. Form dizinizdeki form grubunu ilk başlattığınızda, sadece form dizinizdeki form grubunuzu değiştirin veya abone olun.

İşte örneklemdir.

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

kaydetmek mümkün değil Ben zaten bunu denemek. Ancak değer kontrolleri form kontrol dizisi –

+0

durumunda işe yaramazsa çalışması gerekir. Herhangi bir istisna olup olmadığını öğrenebilir miyim? – i3lai3la