【问题标题】:Toggle form Validators in Angular 4/5在 Angular 4/5 中切换表单验证器
【发布时间】:2018-01-25 14:44:34
【问题描述】:

我希望能够暂时禁用整个表单的验证。注意:虽然我不想禁用实际的表单...

我能找到的最接近的方法是手动remove and add them as described here,但这对于复杂的表单来说相当尴尬。

this.form = this.formBuilder.group({
      email: ['', Validators.compose([Validators.required, Validators.email])],
      password: ['', Validators.compose([Validators.required, Validators.minLength(8)
  ])]
});

有没有类似的?:

this.form.disableValidators() // ???

【问题讨论】:

  • 临时表示您希望添加验证时
  • 是的,稍后删除并重新添加
  • 当你想重新添加时
  • 基本上用按钮切换

标签: javascript angular forms validation angular-forms


【解决方案1】:

您可以在组件中使用布尔属性。

validationEnabled = true;

然后,当您定义控件时,

emailValidators = Validators.compose([Validators.required, Validators.email]);
passwordValidators = Validators.compose([Validators.required, Validators.minLength(8);

this.form = this.formBuilder.group({
      email: ['', this.validationEnabled ? emailValidators : null],
      password: ['', this.validationEnabled ? passwordValidators : null]
});

并根据需要设置属性。

这种方法的一个缺点是您需要在想要切换时重新构建表单。

如果您想在创建表单后执行此操作,则需要使用上面链接的 API 中的方法https://angular.io/api/forms/AbstractControl#setValidators

【讨论】:

  • 不错,但我正在尝试切换。三元运算符将立即计算
  • *表单创建后,动态
  • 正确,不幸的是,使用这种方法,您需要不断地重新创建表单。我编辑了我的答案以反映这一点。创建表单后,您必须使用您在问题中链接的 API 来执行此操作。 : / 虽然复杂的表单可能很困难,但它是一个很好的 API,您可以使用它来简化代码。不过,这可能需要认真考虑。
  • 猜我必须遍历所有嵌套的表单组,然后自己创建一个地图?
  • 也许,我想我需要更多的上下文来回答这个问题。就像,父母应该是告诉表单何时忽略验证的人,还是表单本身应该知道何时应该忽略验证?不过,我认为这超出了这个问题的范围。我建议您尽力而为,如果遇到麻烦,请使用 Stackblitz 或 Plunkr 复制创建一个单独的问题。祝你好运:)
猜你喜欢
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2018-06-26
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2018-08-17
相关资源
最近更新 更多