2016-02-26 100 views
5

Q1。是否有可能有一個控制 即:ngControl與ngFor在Angular2

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

驗證所有同類型的模板input領域的?

Q2。可這些字段由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

這是令人高興的眼睛,我也編碼這樣的事'mentally',但我也想不環路以外的其他地方模板的ngFor等,這就是真正的挑戰在於,我認爲。 –

+1

您可以將代碼'ValidNumber =新的控制( '',CustomValidators.number({分鐘:1,最大:10}))'成指令,那麼你可以使用theh'* ngFor'迭代,並且不需要另一個在你的代碼中。 –

+2

對於Angular2(2.2.x的)的當前版本中,控制應FormControl和[ngFormControl]應該[formControl] – isevcik