我有控制器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