【问题标题】:AngularJS: why empty model fields are removed from object?AngularJS:为什么从对象中删除空模型字段?
【发布时间】:2012-09-08 19:38:58
【问题描述】:

在我的应用程序中,我有一个模型附加到类似这样的表单:

$scope.location = { description: "my descriptive description", address: "blah" }

清除表单中绑定到 ng-model="location.description" 的字段“description”,从 $scope.location 中删除该字段,变为:

$scope.location = { address: "blah" }

现在我希望它保留“描述”字段。我该怎么做才能实现 这种行为?

感谢您的帮助

【问题讨论】:

  • 您能否提供一个带有代码的 jsFiddle(以及更多细节,例如使用的浏览器)。问题是我无法使用这个 jsFiddle 在 Chrome 上重现它:jsfiddle.net/pkozlowski_opensource/myMyQ/1,但您的用例可能不同。
  • 我终于明白为什么该字段消失了。不依赖于浏览器。输入字段添加了一个“必需”,看起来像是这种行为的来源。删除 required 使一切按预期工作。现在只需尝试使“必需”的行为方式相同即可。感谢您的支持!
  • 是的,我怀疑这是由于验证。 AngularJS 验证器的问题是模型在通过验证之前不会被绑定,因此是观察到的行为。很高兴你现在明白了。
  • 'required' 和 'ng-required' 是有区别的。对我来说,'required' 是删除属性,'ng-required' 不是。
  • @pkozlowski.opensource 是否有任何技巧可以在任何输入上重现此行为,是否需要?

标签: javascript angularjs


【解决方案1】:

一种可能性是使用 ng-change 指令:

<input ng-model="desc" ng-change="setDescription()">

在你的控制器中:

$scope.setDescription = function(){
    $scope.location.description = $scope.desc ? $scope.desc: "default" 
}

基于 Kozlowski 的评论:http://jsfiddle.net/myMyQ/2/

【讨论】:

  • 也感谢 Merbs 的支持。
猜你喜欢
  • 1970-01-01
  • 2019-05-17
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2014-09-09
  • 2021-07-01
相关资源
最近更新 更多