清空Angular中的输入字段

时间:2015-10-22 05:53:06

标签: javascript angularjs

当用户输入然后清除输入字段中的文本时,Angular似乎有不同的行为,具体取决于是否需要此字段。

看看这个example。默认情况下,模型为user = {"name":"guest","last":"visitor"}。清除这两个字段时,模型变为user = {"last":""},而我预期user = {}

为什么会这样?并且,有没有办法在两个字段中获得相同的行为而不同时(不)需要它们?

更新

我最后使用了手表的解决方法:

$scope.$watch('user',function(newValue) {
  for (var prop in newValue) {
    if (newValue.hasOwnProperty(prop)){
      if (newValue[prop] !== undefined && newValue[prop] == "")
        newValue[prop] = undefined;
    }
  }
}, true);

最有可能的最后一个if条件可以更有效地编写,但至少它似乎按预期工作。

3 个答案:

答案 0 :(得分:5)

如果验证错误,the model is set to undefined因此消失name密钥(使用required验证)。

Angular中的一个已知错误是ng-minlength的空字段无法正确无效。如果您将值设置为a(仍然是最少3个字母的2个字母),您会发现两个键都正确消失。

https://github.com/angular/angular.js/issues/7277

答案 1 :(得分:1)

这种情况的产生是因为"用户名:"字段具有required验证,因此当您清除"用户名:"领域。 "用户名:"字段未通过required验证。结果,模型变为user = {"last":""}

另一方面,"姓氏:"在明确"姓氏:"之后进行ng-minlength="3"ng-maxlength="10"验证在"姓氏:"上输入1或2个字符时的字段领域。它没有通过minlength验证,因此模型变为user = {}

所以,如果任何validation失败,请使用"用户名:"字段,它从模型中消失,模型变为user = {"last":""}

答案 2 :(得分:0)

如果结果是user = {},则意味着Angular必须通过调用user.delete('last')来完全delete该属性,这是不可能的做。它对person对象一无所知。它只引用了person.last属性