typescript - Angular2 中的 ngControl 和 ngFor

标签 typescript angular angular2-forms

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

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 中提取的值是验证。

最佳答案

你也可以生成控件那就没问题了。

@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() 只运行一次。

关于typescript - Angular2 中的 ngControl 和 ngFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652576/

相关文章:

html - 使用 JSON 数据定义时,所有卡片同时扩展而不是单独扩展

angular - 使用 forkjoin 合并 http observables

angular - ionic 3 设置来自 ionic 存储的默认请求 header

android - Ionic 2 dev 和 prod 环境变量

angular2 formBuilder 组异步验证

angular - 使用自定义 uploadHandler 时,PrimeNG 文件上传进度不会更新

Angular 2 多模块

angular - 从 Angular 8 通用版迁移到 9 通用版失败 : require. 解析不是函数

Angular 如何使 [formControl] 成为可选字段

javascript - Angular:如何从一个组件前端(app.component.html)到另一组件后端(other.component.ts)获取值