【问题标题】:angular 6 reactive form FormGroup validation角度6反应形式FormGroup验证
【发布时间】:2018-09-03 05:37:40
【问题描述】:

尝试根据某些条件添加验证器。当条件为真时,我将添加所需的验证器并在它为假时将其删除。

    createReactiveForm(data: any) {
    const formGroup = new FormGroup({
        'control1': new FormControl(data.key1),
        'control2': new FormControl(data.key2)
    }, this.formValidators.bind(this)),
}


formValidators(formGroup: FormGroup){
    const control1Val: boolean = formGroup.controls['control1'].value;
    if (control1Val) {
        const control2: AbstractControl = formGroup.controls['control2'];
        constrol2.setValidators(Validators.required);
    } else {
        const control2: AbstractControl = formGroup.controls['control2'];
        constrol2.setValidators(() => null);
    }
}
  1. formValidators() 方法被无限次调用 - 我是否在这里做错了什么?

  2. 当条件为真时添加验证器并显示错误。但当条件为假时,验证器被删除,但控件上的错误仍然存​​在 - 原因是什么?

    李>
  3. 在formGroup中绑定formValidators()方法是不是好办法?

帮我解决这个问题。

【问题讨论】:

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


    【解决方案1】:
    1. 不,它在每个更改检测周期/控制更改时调用。
    2. 致电control.setErrors(null)
    3. 第二个参数需要一个函数。您的代码没有问题。

    Validator 函数应该返回一个 error 对象或 null。我不建议将您的逻辑放在验证器函数中,因为它不是正确的位置。您可以收听 control1 valueChanges 并将逻辑移至那里。这样,您将优化代码以仅在 control1 值更改时运行。

    【讨论】:

    • 在其他部分添加了 updateValueAndValidity()。但是没有用。
    • 尝试调用control.setErrors(null);
    • 好的。我得到了它。验证器函数必须返回 null 或错误对象。这就是为什么我们需要做 control.setErrors(null)。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2022-11-03
    • 2020-10-17
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多