angularangular4-forms

Maximum value validator with dynamic value


I have a service which returns a value representing the money user has, and I want the user to be able to do transactions for a value equal or less than the total amount of money. I've tried to use max validation like this:

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;
      }

But it won't work, it seems like the value in max() has to be set from the beginning, so it will just assume totalAmount as undefined.


Solution

  • Update for your edited question:

    Use this:

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

    You can achieve that by using this syntax:

    (control: AbstractControl) => Validators.max(this.totalAmount)(control)
    

    Why?