5

Q1. 1つのコントロールを持つことは可能ですか:

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

失敗した方法 2: formBuilder の場合は上記と同じです。

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

客観的な説明:

  • ngFor で生成され、同様の検証が必要なフォーム フィールドを検証しようとしています。

  • 同様のコントロールを別の場所で繰り返し定義する必要はありません。

  • #form="ngForm"またはのような他の方法で抽出できる値、必要なのngModelngControl検証だけです。

4

1 に答える 1

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()一度だけ実行されます。

于 2016-02-26T13:15:12.253 に答える