【问题标题】:Restangular response and ng-repeatRestangular 响应和 ng-repeat
【发布时间】:2014-06-12 15:27:36
【问题描述】:

我最近开始学习 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);
    });
}
}]);

服务:

app.factory('UsersSvc', function(Restangular) {
    return Restangular.all('users');
});

模板:

<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>

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

提前致谢

【问题讨论】:

  • 我看不到你在哪里定义了usr.users。你也可以添加这部分吗?
  • 复制时 usr 部分是拼写错误。我指的是 UsersCtrl 范围内的用户变量。
  • 我认为s 指的是$scope 是否正确。还有为什么不试试 console.log 承诺的结果,看看你得到了什么
  • 没错。 promise 的结果返回一个正确的 json 数组,并且 users 变量相应地改变。主要问题是模板的 ng-repeat 部分不会在 users 变量发生变化时自行更新。

标签: angularjs node.js sails.js restangular


【解决方案1】:

AngularJS(和 javascript)关心引用与覆盖。所以为了安全起见,我总是先设置我的范围变量,然后使用angular.copy()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);
    });
}
}]);

【讨论】:

  • 但是现在你正在注入服务和 Restangular。
  • @honeycomb 你是对的,我切换到angular-data.pseudobry.com 这太棒了。但我想你可以在你的 Angular 应用程序的其他地方包含 Restangular,我会测试但我退休了 Restanguar ;)
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多