我的控制器中有一个$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
    // ...
}

10-04 22:32