Restangular响应和ng-repeat

rte*_*erv 5 node.js angularjs sails.js restangular

我最近开始学习angularjs使用restangular与我的restfull API(sails)交谈.我偶然发现的问题是,在更改范围中的列表后,ng-repeat不会更新.

控制器:

app.controller('UsersCtrl', ['UsersSvc', '$scope', function(UsersSvc, s) {
    UsersSvc.getList().then(function (new_users) {
        s.users = new_users;
    })
    s.destroy = function (user) {
        user.remove().then(function () {
        s.users = _.without(s.users, user);
    });
}
}]);
Run Code Online (Sandbox Code Playgroud)

服务:

app.factory('UsersSvc', function(Restangular) {
    return Restangular.all('users');
});
Run Code Online (Sandbox Code Playgroud)

模板:

<div ng-controller="UsersCtrl">
    ...
    <tr ng-repeat"user in users">  
          <td>{{user.firstName}}</td>  
          <td>{{user.lastName}} </td>  
          <td>{{user.emailAddress}}</td>  
          <td>{{user.age}}</td>  
    </tr> 
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

当我检查范围时,restangular对象数组被正确地分配给用户控制器的范围,但模板拒绝更新.

提前致谢

ele*_*ake 4

AngularJS(和 javascript)关心引用与覆盖。因此,为了安全起见,我总是首先设置范围变量,然后使用angular.copy()or进行更新Restangular.copy()(如果设置的是 Restangular 对象)。

以下是我如何重构控制器以确保绑定+摘要循环保持连接。

(请注意,我将其重命名s为“传统” $scope,以便其他人更容易阅读)

app.controller('UsersCtrl', ['$scope', 'UsersSvc', 'Restangular', function($scope, UsersSvc, Restangular) {

    // we're expecting a list, so default as array
    $scope.users = [];

    UsersSvc.getList().then(function (new_users) {
        // In normal $resource/ng projects use: angular.copy(src, dst) but
        // Restangular has an issue when using angular.copy():
        // https://github.com/mgonto/restangular/issues/55
        // so use their version of copy():
        Restangular.copy(new_users, $scope.users);
    });

    $scope.destroy = function (user) {
        user.remove().then(function () {
        $scope.users = _.without($scope.users, user);
    });
}
}]);
Run Code Online (Sandbox Code Playgroud)