【问题标题】:unique value angular reactive forms唯一值角反应形式
【发布时间】:2018-07-30 14:36:14
【问题描述】:

我对 Angular 4 反应式表单有疑问。

我的申请是一个培训项目。它在 SpringBoot、mySql 数据库和 Angular4 中有一个 Backend。

这个应用程序必须将医生添加到数据库,但还必须验证:许可证号必须是唯一的。我正在使用响应式表单(不是模板驱动的)。

我试图用函数解决我的问题:

    import { AbstractControl } from "@angular/forms";



export function  ControlLicenseNumber(c: AbstractControl):  string | null {
  const formGroup = c.parent.controls;
  return Object.keys(formGroup).find(license_number => c === formGroup[license_number])  || null;
 }

但我不知道如何将它注入到我的 formControl:

   constructor(private doctorsService: DoctorsService,
              private location: Location,
              private fb: FormBuilder) {
                this.rForm = new FormGroup({ 
                'name': new FormControl('', Validators.required),
                'surname': new FormControl('', Validators.required),
                'phone': new FormControl('', Validators.required),
                'nationality': new FormControl('', Validators.required),
                'email': new FormControl('', Validators.email),
                'license_number': new FormControl('', [Validators.required, ControlLicenseNumber])})
                 }

希望你们能帮助我。问候

【问题讨论】:

  • 你想把这个验证器放在哪里?我在您的表单中没有看到license_number 表单控件?另外,为什么要为表单控件设置对象? :)
  • 好的,我已经编辑了我的代码 :)
  • 我只是在学习,这些对象来自一些教程......所以如果这是错误的做法,我会按照你说的删除它。
  • 现在看起来好多了 :) 是的,表单控件应该只采用原始值。(嵌套)表单组用于对象。
  • 感谢您的建议。接下来我应该做什么来验证 license_number?我浏览了整个互联网:/

标签: angular forms angular-reactive-forms angular4-forms reactive-forms


【解决方案1】:

试试这样:-

constructor(private doctorsService: DoctorsService,
          private location: Location,
          private fb: FormBuilder) {
            this.rForm = this.fb.group({({ 
              name           : ['', [Validators.required]],
              surname        : ['', [Validators.required]],
              phone          : ['', [Validators.required],
              nationality    : ['',[Validators.required]],
              email          : ['', Validators.email],
              license_number : ['', [Validators.required]
              },
             {
                validator: this.ControlLicenseNumber
           });
}

ControlLicenseNumber(c: AbstractControl){
  const value = c.get('license_number').value;
  return Object.keys(value).find(license_number => c === 
  value)  || null;
}

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 2020-11-23
    • 2022-01-03
    • 2018-11-17
    • 2020-05-01
    • 2020-03-11
    • 2018-07-31
    相关资源
    最近更新 更多