2

我有两个需要共享模型的角度服务(消息列表和单个消息),它们是通过调用我们的 API 获得的。服务如下:

angular.module('CmServices', ['ngResource'])
.factory('Messages', function ($resource, $routeParams, $rootScope) { 

    var data = {};

    data.rest = $resource(url, {}, {
            query: {method:'GET', params: params},
            post: {method:'POST', params: params}
        });

    // Trying to set this through a call to the API (needs to get param from route)
    $rootScope.$on('$routeChangeSuccess', function(event, current, previous) {
            var messages = data.rest.query({m_gid: $routeParams.gid}, function () { 
                data.messages = messages;
            });
    });

    return data;    
});

控制器是:

function MessagesCtrl ($scope, $http, $location, $routeParams, Messages) {
   $scope.messages = Messages.messages;
}

function MessageCtrl ($scope, $http, $location, $routeParams, Messages) {
   $scope.messages = Messages.messages[0];
}

但是当从 REST API 加载数据时,两个控制器都不会更新(我已经记录了返回的数据,它肯定会)。

4

2 回答 2

8

而不是像这样分配一个新数组data.messages

data.messages = messages

改用angular.copy(),它将填充相同的数组:

angular.copy(messages, data.messages)

这样,控制器将看到更新。

于 2013-05-23T03:49:25.933 回答
0

问题是您data要向每个控制器返回不同版本的。我会放在messages$rootScope 中。所以

data.rest.query({m_gid: $routeParams.gid}, function () { 
            $rootScope.messages = messages;
        });

data.rest.query顺便说一句,设置to的返回值的目的是什么var messages?一旦您离开该函数,该变量就会被破坏。

于 2013-05-23T00:28:42.370 回答