2016-02-26 12 views
5

क्यू 1 में ngFor के साथ। यह एक नियंत्रण करना संभव है यानी:एनजी कंट्रोल एंगुलर 2

ValidNumber = new Control('', CustomValidators.number({min:1, max:10})) 

टेम्पलेट में input क्षेत्रों के सभी समान प्रकार मान्य करने के लिए?

प्रश्न 2। क्या ये फ़ील्ड ngFor द्वारा उत्पन्न की जा सकती हैं?


FailedMethod 1: मान्यता काम करता है लेकिन मूल्यों मिलकर कर रहे हैं।

<input [ngFormControl]="ValidNumber" name="num1" type="number"/> 
<input [ngFormControl]="ValidNumber" name="num2" type="number"/> 

FailedMethod 2: formBuilder के साथ यह ऊपर के रूप में ही है।

<form [ngFormModel]="formBuiltWithFormBuilder"> 
    <input ngControl="ValidNumber" name="num1" type="number"/> 
    <input ngControl="ValidNumber" name="num2" type="number"/> 
</from> 

उद्देश्य स्पष्टीकरण:

  • मैं प्रपत्र फ़ील्ड्स कि ngFor साथ उत्पन्न किया जा सकता है और इसी तरह के सत्यापन की आवश्यकता को मान्य करने की कोशिश कर रहा हूँ।

  • समान नियंत्रणों को बार-बार कहीं और परिभाषित किए बिना।

  • मान मैं #form="ngForm" या ngModel की तरह किसी अन्य विधि के साथ निकाल सकते हैं, सभी मैं ngControl से चाहते मान्यता है।

उत्तर

3

आप नियंत्रण भी उत्पन्न कर सकते हैं तो कोई समस्या नहीं है।

@Component({ 
    ... 
    template: ` 
... 
<input *ngFor="let c in controls" [ngFormControl]="c" name="c.name" type="number"/> 
... 
` 
}) 
class MyComponent { 
    // initialization with `['a', 'b', 'c']` just for demo purposes 
    // these values probably come from outside - hence @Input() 
    @Input() controlNames:string[] = ['a', 'b', 'c']; 

    controls: Control[]; 

    ngOnInit() { 
    this.controlNames.forEach(
     v => this.controls.push(
      new Control('', CustomValidators.number{min:1, max:10}) 
     ) 
    ); 
    } 
} 

(परीक्षण नहीं कोड)

controls जरूरतों को अपडेट करने की जब controlNames बदल जाता है। ngOnInit() केवल एक बार चलता है।

+0

यह आंखों को प्रसन्न करता है, मैंने इस मानसिक रूप से कुछ भी कोड किया है, लेकिन मैं टेम्पलेट के एनजीफ़ोर के अलावा कहीं और लूप नहीं करने की कोशिश कर रहा हूं, यही वह जगह है जहां असली चुनौती झूठ है, मुझे लगता है। –

+1

आप कोड 'ValidNumber = new Control (' ', CustomValidators.number ({min: 1, max: 10})) को निर्देश में ले जा सकते हैं, फिर आप '' ngFor' पुनरावृत्ति का उपयोग कर सकते हैं और इसकी आवश्यकता नहीं है आपके कोड में एक और। –

+2

Angular2 (2.2.x) के वर्तमान संस्करण के लिए, नियंत्रण FormControl होना चाहिए और [ngFormControl] होना चाहिए [formControl] – isevcik