我有一个像这样的AngularJS模型:
$scope.model = {name: "Joe", isMale: true};
在视图中,我将model.isMale绑定到一个复选框。
现在我要求后端进行更新($ http.get())。在onSuccess回调中,我只是将响应值分配给$ scope.model。如果后端没有向我发送整个模型,例如不发送isMale标志,$ scope.model不再具有isMale标志。当我稍后在UI中更改名称并将这些数据发送到后端时,标志isMale不再发送到后端,因为模型不包含它。有没有办法检查视图元素是否'模型绑定确实存在?有没有比用后端获得的值覆盖模型更好的解决方案?
由于
答案 0 :(得分:2)
您可以extend
您的模型,并使用api响应中的一个覆盖您的默认模型值。这样,只有在api响应中出现默认值时才会覆盖默认值:
angular.extend($scope.model, response)
用于浅拷贝,或
angular.merge($scope.model, response)
用于深度(递归)复制
这应该适用于你的场景
请在此处参考angular.copy()
,'angular.extend()'和angular.merge()
之间差异的复杂细节:http://davidcai.github.io/blog/posts/copy-vs-extend-vs-merge/