【问题标题】:AngularJS - set form pristine without removing validation errorsAngularJS - 在不删除验证错误的情况下设置原始表单
【发布时间】:2014-07-01 16:49:02
【问题描述】:

我们为特定表单提供自动保存和显式保存(这是一个长表单,我们不希望用户丢失数据)。对于显式保存,无效数据将阻止保存发生,并且不会将 XHR 发送回服务器。但是,对于自动保存,我们希望保存数据(如果可能),而不管前端验证如何。

我们需要做的是,如果在后端保存成功,前端应该将表单标记为不再脏。但是......这是贴纸 - 它应该从表单中删除任何验证错误/错误消息。

据我所见(或至少据我了解),.$setPristine() 将清除表单,但它也会有问题地消除验证错误。

有没有办法在不删除验证错误的情况下清除表单,以便在已经执行保存时不会运行自动保存,但这样用户仍然可以获得哪些字段无效的反馈,以便他们可以解决问题吗?

谢谢!

【问题讨论】:

  • 我建议不要使用$pristine,因为它已经有意义(与自动保存无关)。您可以创建自己的属性,$pristine 可以在某一天用于向用户反馈他们触摸了哪些字段。

标签: javascript forms angularjs validation dirty-data


【解决方案1】:

表单的$pristine/$dirty 状态未连接到$valid/$invalid 状态。 不应删除您的错误消息(除非您在显示/隐藏消息的情况下使用 $pristine/$dirty)。


因此,您可以在自动保存函数中调用 FormController 的 $setPristine() 方法,这将“清除”表单,但不会影响验证和错误消息。


另请参阅此short demo

例如:
* 在上面的小提琴中,在一个字段中输入一些内容(因此它变得有效并且表单变得脏)。
* Save 按钮已启用。
* 按Save 按钮将表单的状态设置为$pristine,因此该按钮被禁用(这模拟了自动保存)。
* 尽管错误消息仍然可见(并且表单的有效性状态不会改变)。

【讨论】:

  • ?!?再次投反对票是什么?!? (来吧人们 - 至少留下评论......)
  • 你是绝对正确的。无论谁对你投了反对票,都没有做好。原始状态和有效状态没有任何联系,您的帖子应标记为已接受的答案。
  • 是的,您是正确的 ExpertSystem。我对另一个开发人员附加到表单的另一个指令感到困惑。谢谢你的小提琴。我赞成你来抵消反对票:)
  • @ExpertSystem 愉快地完成了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2023-02-10
相关资源
最近更新 更多