如何根据变量的当前值验证输入(自定义验证器函数)?

How to validate an input against the current value of a variable (Custom validator function)?

我的表单上有一个输入字段,需要验证该数字不大于 1,000,000 且不小于帐户余额。我能够将最大值设置为 1,000,000,但未能成功地将余额与输入进行比较。我希望这会导致输入字段周围出现红色轮廓,类似于超过 1,000,000 时的情况。这是我的代码:

HTML模板

<mat-form-field appearance = outline class="amount">
  <mat-label>Amount</mat-label>
  <input matInput
    type='number'
    required 
    formControlName="amount">
</mat-form-field>

组件

export class StartComponent implements OnInit {
  currentAccount: ICustomerAccount;
  amountMax = 1000000;
  startForm = new FormGroup({
    amount: new FormControl('', Validators.max(this.amountMax)),
  });
}

您需要一个 CustomValidator 函数,如下所述:https://angular.io/guide/form-validation

@Component({
  selector: 'app-validator-test',
  templateUrl: './validator-test.component.html'
})
export class ValidatorTestComponent implements OnInit {
  public startForm: FormGroup;
  public amountMax = 5000;
  public currentAccount: any = {value: 10};

  constructor(private formBuilder: FormBuilder) {}

  public ngOnInit(): void {
    this.startForm =  this.formBuilder.group({
      amount: ['', [Validators.max(this.amountMax), this.customValidatorFn()]]
    });
  }

  private customValidatorFn(): ValidatorFn {
    return (control: AbstractControl): ValidationErrors | null => {
      const valid: boolean = this.currentAccount.value <= control.value;
      return valid ? null : {amountMinError: true};
    };
  }
}

模板:

<form [formGroup]="startForm" *ngIf="startForm">
  <input formControlName="amount" type="number"/>
  <div>valid: {{startForm.get('amount').valid}}</div>
</form>

不要忘记将 FormsModule 和 ReactiveFormsModule 添加到模块导入中:imports: [BrowserModule, FormsModule, ReactiveFormsModule],