具有动态值的最大值验证器

Mig*_*ezv 6 angular angular4-forms

我有一个服务,它返回一个代表用户资金的值,我希望用户能够进行等于或小于总金额的交易.我试过像这样使用max validation:

valid() {
        const form: FormGroup = this._fb.group({
          fond: ['', [Validators.required]],
          serie: ['', [Validators.required]],
          account: ['', [Validators.required, Validators.min(1)]],
          value: ['', [Validators.required, Validators.min(1)]],
          subAccount: ['', [Validators.required, Validators.min(1)]]
        });
        return form;
      }
Run Code Online (Sandbox Code Playgroud)

但是它不起作用,似乎max()必须从头开始设置值,所以它只是假定totalAmount为undefined.

Har*_*inh 19

更新已修改的问题:

用这个:

value: ['', [
  Validators.required, 
  Validators.min(1), 
  (control: AbstractControl) => Validators.max(this.totalAmount)(control)
]]
Run Code Online (Sandbox Code Playgroud)

您可以使用以下语法实现此目的:

(control: AbstractControl) => Validators.max(this.totalAmount)(control)
Run Code Online (Sandbox Code Playgroud)

为什么?

  • 当您提供时Validators.max(this.totalAmount),它会使用给定参数(当前值this.totalAmount)创建验证函数,然后将其分配给表单控件.
  • 当您使用胖箭头功能时,分配给窗体控件的是胖箭头定义本身.每次调用胖箭头函数时(在有效性检查期间),它都会重新评估Validators.max(this.totalAmount)并使用当前值创建新的验证函数this.totalAmount,从而使其成为动态.