我有控制器A将一些数据发送到共享服务和控制器B,应该读取该数据。问题是控制器B在控制器A的不同页面上(在同一网站上),即,我确实没有。在控制器A上,单击按钮(将数据发送到服务)并打开另一个页面,其中控制器B应该从服务读取数据。但是没有任何反应,所以我的问题是控制器可以在不同的页面上进行通信吗?Angularjs不同选项卡中的控制器之间的通信
这里是我想做到这一点,但没有运气:
服务:
publicApp.angularModule.service('controllerCommunicationService', function ($rootScope) {
var communicationService = {};
communicationService.data = null;
communicationService.setDataForBroadcast = function(data) {
this.data = data;
this.broadcastData();
};
communicationService.broadcastData = function() {
$rootScope.$broadcast('handleBroadcast');
};
return communicationService;
});
控制器A的相关部分:控制器B的
publicApp.angularModule.controller('PublicRoutinesCtrl', function ($scope, $rootScope, routinesService, controllerCommunicationService, bootstrapCarouselService) {
$scope.goToNextScreen = function() {
var currentIndex = bootstrapCarouselService.getcurrentSlideIndex();
controllerCommunicationService.setDataForBroadcast($scope.items[currentIndex].Routine.RoutineId);
};
相关部分:
$rootScope.$on('handleBroadcast', function() {
console.log("TEST");
$http.post("/EditWorkout/PostRoutineId", { routineId: controllerCommunicationService.data })
.success(function() {
console.log("success");
})
.error(function (responseData) {
console.log("Error !" + responseData);
});
});
甚至console.log("TEST");
未被解雇。
更多的FYI不是一个解决方案,但如果您将'controllerCommunicationService.setDataForBroadcast()'放在$ timeout中足够的延迟,只要目标页面有足够的时间加载,代码就可以工作。虽然绝对不可靠。 – Lavamantis