使用服务在控制器之间共享状态
Using services to share state between controllers
我想在我的Angular应用中的多个控制器之间通过服务共享'state'。我的代码如下。我遇到的问题是,通过vm.toggleStatus()
启动状态变化的控制器已更新,但此状态在我的另一个控制器中不会更新,直到我刷新页面。
controller1.js:
angular.module('gameApp')
.controller('PlayerActionsController', PlayerActionsController);
PlayerActionsController.$inject = ['$routeParams', 'playersService'];
function PlayerActionsController($routeParams, playersService) {
var vm = this;
var playerId = $routeParams.playerId;
var getplayerInfo = function() {
playersService.getPlayerInfo({
playerId: playerId
}).$promise.then(function(player) {
vm.player = player;
});
};
var init = function() {
getplayerInfo();
};
init();
vm.toggleStatus = function() {
playersService.toggleStatus({
playerId: playerId
}, {}).$promise.then(function() {
getplayerInfo();
});
};
}
controller2.js:
angular.module('gameApp')
.controller('HeaderController', HeaderController);
HeaderController.$inject = ['$routeParams', 'playersService'];
function HeaderController($routeParams, playersService) {
var vm = this;
vm.playerId = $routeParams.playerId;
var getPlayerInfo = function() {
playersService.getPlayerInfo({
playerId: vm.playerId
}).$promise.then(function(player) {
vm.player = player;
});
};
var init = function() {
getPlayerInfo();
};
init();
}
players.service.js:
angular.module('gameApp')
.factory('playersService', ['$resource',
function($resource) {
var base = '/api/players/:playerId/';
return $resource(base, {}, {
getPlayerInfo: {method: 'GET', url: base + 'playerInfo'},
toggleStatus: {method: 'PUT', url: base + 'toggleStatus'}
});
}]);
服务不会向控制器推送数据,控制器需要从服务中提取数据或者监听数据的变化。
你可能想要做的是更新你的服务,当数据发生变化时发出一个事件,然后让你的控制器列出这些事件,并在发生变化时更新。例子:
//service toggleStatus
toggleStatus = function(data) {
... what it currently does.
$rootScope.$emit('StatusChangedEvent', newStatus);
... return promise;
}
// in your controllers
$rootScope.$on('StatusChangedEvent', function(evt, newStatus) {
$scope.status = newStatus;
});
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 使用服务(AngularJS)在控制器之间共享数据
- AngularJS中的页面之间共享数据返回空
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- 在Knockoutjs中的ViewModels之间共享变量状态
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- Node.js服务器和浏览器之间共享二进制缓冲区
- 使用Angularjs在两个不同页面的控制器之间共享数据
- 在两个浏览器选项卡之间共享变量范围
- 不同进程之间共享Node.js环境
- 在Angular Bootstrap Modal和父控制器之间共享作用域
- 2ng控制器,并且需要在控制器之间共享数据
- Javascript创建函数,以便在其他函数之间共享变量
- 在控制器angular js之间共享数据
- 在javascript客户端和java服务器之间共享Google Analytics ClientID
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 在角度上不同控制器之间共享状态