在Angular2中使用ngFor的ngControl

Ank*_*ngh 5 typescript angular2-forms angular

Q1.是否有可能有一个控件,即:

ValidNumber = new Control('', CustomValidators.number({min:1, max:10}))
Run Code Online (Sandbox Code Playgroud)

验证input模板中所有类似的字段类型?

Q2.这些字段可以由ngFor?生成?


FailedMethod 1:验证有效但值已耦合.

<input [ngFormControl]="ValidNumber" name="num1" type="number"/>
<input [ngFormControl]="ValidNumber" name="num2" type="number"/>
Run Code Online (Sandbox Code Playgroud)

FailedMethod 2:使用formBuilder,它与上面相同.

<form [ngFormModel]="formBuiltWithFormBuilder">
  <input ngControl="ValidNumber" name="num1" type="number"/>
  <input ngControl="ValidNumber" name="num2" type="number"/>
</from>
Run Code Online (Sandbox Code Playgroud)

客观澄清:

  • 我正在尝试验证可能使用ngFor生成的表单字段,并且需要类似的验证.

  • 没有在别处重复定义类似的控件

  • 我可以使用任何其他方法提取的值,#form="ngForm"或者ngModel,我想要的ngControl是验证.

Gün*_*uer 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})
        )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

(代码未测试)

controls发生变化时需要更新controlNames。ngOnInit()仅运行一次。

  • 对于当前版本的 Angular2 (2.2.x),Control 应为 FormControl,[ngFormControl] 应为 [formControl] (2认同)