Angular 4 有条件地删除所需的验证器

新手上路,请多包涵

在 Angular 4 应用程序中,我有一个这样的表单模型:

 this.form = this._fb.group({
    title: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(50)]],
    description: ['', [Validators.required, Validators.minLength(3)]]
});

现在我想要的是从控件验证器数组中动态删除所需的验证器。像这样的东西:

 saveDraft() {
    this.form.controls['title'].removeValidator('required'); //Just a fake implementation for demonstration
}

这个问题不是上述问题的重复。我的情况不同,我只想在不知情的情况下删除所需的验证器。

原文由 Ali Shahzad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 615
1 个回答

您可以使用: AbstractControl.removeValidators(validator: ValidatorFn)

不确定在 Angular 4 中是否可能,但肯定在 Angular 12 及更高版本中。

但是,它需要对 完全相同的功能 的引用。仅仅给它 Validators.required 是行不通的。您需要为它创建一个唯一的引用:

 requiredValidator = Validators.required;

this.form = this._fb.group({
    title: ['', [this.requiredValidator, Validators.minLength(3), Validators.maxLength(50)]],
    description: ['', [this.requiredValidator, Validators.minLength(3)]]
});

saveDraft() {
    this.title.removeValidators(this.requiredValidator);
}

get title(): AbstractControl {
    return this.form.get('title');
}

原文由 Tombalabomba 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进