我有两个角度服务需要共享模型(消息列表和单个消息),这些服务来自对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加载时,两个控制器都没有更新(我已经记录了数据返回,但肯定会这样做)。
答案 0 :(得分:8)
而不是将新数组分配给data.messages
,如下所示:
data.messages = messages
使用angular.copy()代替,它将填充相同的数组:
angular.copy(messages, data.messages)
这样,控制器就会看到更新。
答案 1 :(得分:0)
问题是您要向每个控制器返回不同版本的data
。我会将messages
放在$ rootScope中。所以
data.rest.query({m_gid: $routeParams.gid}, function () {
$rootScope.messages = messages;
});
顺便说一下,将data.rest.query
的返回值设置为var messages
的目的是什么?离开函数后,该变量就会被破坏。