我的控制器中有一个$scope.model
对象。它的属性在启动时从服务器获取,并绑定到视图中的输入字段。
<input type="text" ng-model="model.name" placeholder="name"/>
<input type="email" ng-model="model.email" placeholder="email"/>
<!-- ... -->
当我想遍历来自服务器或表单字段的此模型的所有属性时。例如,我需要它来查找实际上已更改为仅将那些属性发送回服务器的属性。
$scope.save = function() {
// Filter changed properties
var changed = {};
for (i in $scope.model) {
if (i in initial && model[i] == initial[i])
continue;
changed[i] = model[i];
}
// Send them to server
// ...
}
但是,我不知道AngularJS是否在内部向我的对象添加属性。那么使用此语法是否安全?是否会遍历我不应该看到甚至无法操纵的AngularJS特定属性?
最佳答案
Angular用$
为其自己的内容加上前缀,因此,如果您想安全起见,请确保键不是以此开头的。
例如,如果您使用的是ng-repeat
角度,则将添加$$hashKey
属性。
而且,您永远不会知道他们将来是否会开始添加其他属性,但是如果这样做,它们(很可能)会遵循约定并加上前缀。
$scope.save = function() {
var changed = {};
// Filter changed properties
for (i in $scope.model) {
// Skip Angular prefix
if (i.length && i[0] == '$')
continue;
// Skip if not changed
if (i in initial && model[i] == initial[i])
continue;
// Add to result
changed[i] = model[i];
}
// Send them to server
// ...
}