【问题标题】:angular reactive form toggle validation required?需要角度反应形式切换验证?
【发布时间】:2021-07-19 11:32:05
【问题描述】:

我有这个单选按钮询问(你有按摩证书吗?)如果是,它将显示文件输入。我希望这个文件输入不需要是默认的,如果用户选择是,它将成为必需的。我在下面有这段代码,默认情况下将证书验证设置为空,如果 has_cert 变为真,则设置证书验证器但它不起作用..我需要你们的帮助。提前致谢。

<p>Form value: {{ form.value | json }}</p>
<p>cert input : {{ form.get('cert').status | json }}</p>

.ts

form: FormGroup;
has_cert = new FormControl(false || true);
has_exp = new FormControl(false || true);
ngOnInit(): void {

    this.form = new FormGroup({
        ...
        has_cert: new FormControl(''),
        cert: new FormControl(''),
        ...
    })

    this.form.get("cert").setValidators(null);

    this.form.get('has_cert').valueChanges.pipe(
        filter(value => value === false || null)
    ).subscribe(
        () => this.form.get('cert').setValue(''),
        () => this.form.get("cert").setValidators(null)
    );

    this.form.get("has_cert").valueChanges.pipe(
        filter(value => value === true)
    ).subscribe(
        () => this.form.get("cert").setValidators(
            [
                Validators.required,
                Validators.pattern('^.*\.(doc|DOC|docx|DOCX|pdf|PDF)$')
            ]
        )
    );
}

【问题讨论】:

  • 什么不适合你?跨字段验证或启用/禁用cert
  • 我是的,我想在用户选择是时启用验证,在用户选择否时禁用验证
  • 知道了!你可以创建一个 stackblitz 分叉吗?
  • @NikhilWalvekar 嗨,我已经更新了我的问题中的代码

标签: javascript angular rxjs angular-reactive-forms


【解决方案1】:

您需要为每种情况使用form.get('something').setValidators(...)

【讨论】:

  • 嗨@Liu Zhang,我已经尝试过了,但是如果 has_cert 变为 false,我无法删除验证器 this.form.get('has_cert').valueChanges.pipe( filter(value => value = == false)) .subscribe(() => this.form.get('cert').setValue(''), () => this.form.get('cert').setValidators([]) ) ;
  • 嗨,我已经更新了我的问题中的代码
【解决方案2】:

要补充@Liu Zhang的答案,我相信您可以使用 clearValidators 删除您使用 setValidators 添加的所有验证器。

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多