5

基本上,我有一些表单输入,它们的验证相互依赖(即,如果你在一个时间范围内,“从”时间必须小于“到”时间)但我不完全确定如何去吧。

这是我的表单组:

this.form = this.fb.group({
  fromTime: ["", [Validators.required, CustomValidator.myValidationFunction(this.form.get("toTime").value)]],
  toTime: ["", [Validators.required]]
});

到目前为止,这是我的验证器:

static myValidationFunction(testing) {
    const toTime = testing; // only comes here 1 time
    return control => {
      return toTime /*this value never changes*/  ? null : { test: {} };
    };
  }

但似乎该值xtoTime仅在创建验证器时第一次设置。有没有办法将动态输入传递给自定义验证器?

我对 Angular 还很陌生,但是已经阅读了有关自定义表单验证的文档,但似乎找不到我的答案

4

1 回答 1

2
static TimeValidator(formGroup) {
    const fromTime = formGroup.controls.fromTime;
    const toTime = formGroup.controls.toTime;

    if (fromTime.value && toTime.value) {
        if (toTime.value <= fromTime.value) {
            return {time: true};
        }

    }
    return null;
}

ngOnInit(): void {
    this.form = new FormGroup({
        fromTime: new FormControl('', Validators.required),
        toTime: new FormControl('', Validators.required)
    }, AppComponent.TimeValidator);

    this.form.controls.fromTime.setValue(2);
    this.form.controls.toTime.setValue(1);
}

在 html 中,您可以通过以下方式检查:

{{form.hasError('time')}}

如果您有任何问题,请随时提问。

于 2018-09-18T18:53:31.487 回答