2017-11-07 11 views
5

मैं कोणीय 4 परियोजना पर काम कर रहा हूं। मुझे फॉर्म कंट्रोल सरणी के परिवर्तनों का पता लगाने की आवश्यकता है। जैसे मेरे पास प्रदाताओं नामक एक फॉर्म कंट्रोल सरणी है, इसके परिवर्तनों का पता कैसे लगाएं?कोणीय 4 में फॉर्म नियंत्रण सरणी में परिवर्तनों का पता कैसे लगाएं?

export class CustomFormArray { 
public form: FormGroup; 

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

आपको यह पता लगाने के लिए में एक और समूह के रूप में प्रदाताओं सरणी के अंदर तत्व रजिस्टर करने की आवश्यकता है। –

+0

क्या आप इसे समझा सकते हैं? –

+0

प्रदाताओं का तत्व क्या है? –

उत्तर

2

FormArray फैली AbstractControl तो यह 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 प्रत्येक इनपुट फ़ील्ड का मान के साथ एक सरणी वापस आ जाएगी सदस्यता ले में जब परिवर्तन (व्याकरण की दृष्टि से या यूआई से) के किसी भी।

FormArray में कुछ भी नहीं होने पर मामले में कुछ भी नहीं है। बस निम्नलिखित घटक कोड का उपयोग करें।

(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

समान फॉर्म समूह के लिए आप इसे कैसे करते हैं। जब भी आप अपने फॉर्म सरणी के फॉर्म समूह को प्रारंभ करते हैं, तो बस अपने फॉर्म एरे के फॉर्म फॉर्म को इवेंट/सब्सक्राइब करें।

यहां नमूना है।

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

को पंजीकृत करना संभव नहीं है, मैंने पहले ही इसे आजमाया है। लेकिन valueChanges फॉर्म कंट्रोल सरणी –

+0

के मामले में काम नहीं करता है, इसे काम करना चाहिए। क्या मुझे पता चलेगा कि क्या कोई अपवाद है? – i3lai3la

संबंधित मुद्दे