Angularjs 角度不';输入无效时,在模型更改时恢复空但有效的输入值

Angularjs 角度不';输入无效时,在模型更改时恢复空但有效的输入值,angularjs,angularjs-ng-model,Angularjs,Angularjs Ng Model,我在和表单验证方面遇到了一个奇怪/令人困惑的行为 本质上,如果输入具有无效的数值(将form.$valid设置为false),如果模型值更改为null,则它会将$valid标志设置回true,但不会更改输入字段中显示的值 我创建了一个示例。按照以下步骤复制: 将单元格的值修改为空 单击保存链接(将null保存到模型中) 输入一个非数字字符 单击重置链接(从模型恢复null) 请注意,输入字段不再无效,但无效字符仍然存在 这是一个错误还是我做错了什么 编辑: 我开始相信这是一个错误。我通过引入另一

我在
和表单验证方面遇到了一个奇怪/令人困惑的行为

本质上,如果输入具有无效的数值(将
form.$valid
设置为
false
),如果模型值更改为
null
,则它会将
$valid
标志设置回
true
,但不会更改输入字段中显示的值

我创建了一个示例。按照以下步骤复制:

  • 将单元格的值修改为空
  • 单击保存链接(将
    null
    保存到模型中)
  • 输入一个非数字字符
  • 单击重置链接(从模型恢复
    null
  • 请注意,输入字段不再无效,但无效字符仍然存在
  • 这是一个错误还是我做错了什么

    编辑:

    我开始相信这是一个错误。我通过引入另一个指令来“修复”它,该指令强制
    null设置
    值。
    这里有一个关于“修复”的例子

    EDIT2:


    这在v1.3+中得到了修复。

    您的代码运行正常,但忘记在app.js中添加验证检查

     this.save = function(){
          if($scope.mainForm.$valid && !this.get() == ""){
              old_num = num;
          }
     };
    
    您应该仅在表单有效时保存该值

    但是,这不是一个完整的解决方案,因为整个表单必须有效才能保存。为了进一步改进算法,我建议您标记单个模型的有效性,并检查单个模型的有效性


    希望有帮助

    有一个类似的问题,我通过以下方法解决了它:

    form.$rollbackViewValue()
    form.field.$rollbackViewValue
    如果是
    $invalid
    ,则在执行任何其他重置代码之前

    在您的示例中,您可以更改为:


    重置

    谢谢您的回复,但这对我没有帮助。当我保存了一个有效(例如空/空)值,但无法恢复时,就会出现问题。因此,使用您的建议并不能修复我描述的错误。同样,我的问题是一个非常具体的表单验证行为。这与我如何/何时保存表单没有什么关系。你不能先检查空值吗?检查我的修改。我添加了一个检查,以查看该值是否为空。我进行了测试,它在我这边起作用。尽管如此,我在保存方面没有问题——我在重置方面有问题。我不明白你的办法是什么。您是否遵循了问题中的复制步骤?这不是一个错误-这是一条日志消息,我放在那里是为了查看发生了什么。当值无效时,
    ngModel
    指令将模型设置为
    undefined
    。问题是,当我试图将模型设置回
    null
    -无效标志被重置,但无效值保留在输入字段中。事实上,这是一个错误-在v1.3中已修复+