Я разрабатываю систему разрешений для моего приложения, используя завод, который выглядит следующим образом:Broadcast различные контроллеры в AngularJS
angular.module('ecosystemServices', [])
.factory('Guard', function($http, $rootScope) {
var permissions = [];
return {
ready: function() {
if (permissions.length == 0) {
$http.get('/api/users/own-permissions')
.success(function(data){
permissions = data.user_permissions;
$rootScope.$broadcast('permissionsReady', 1);
});
} else {
$rootScope.$broadcast('permissionsReady', 1);
}
return true;
}
}
})
я должен ждать, пока не будут загружены разрешения начать делать запросы, поэтому я выполняя передачу на контроллер, который выглядит примерно так:
appControllers.controller('AgencyPanelCtrl', ['$rootScope', '$scope', '$location', '$routeParams', '$http','Guard',
function ($rootScope, $scope, $location, $routeParams, $http, Guard) {
$scope.loading = true;
Guard.ready();
$scope.has_permission = function(permission) {
return Guard.can(permission);
}
$rootScope.$on('permissionsReady', function(event, ready) {
$scope.initialize();
});
$scope.initialize = function() {
console.log("Initialized");
}
}]);
это работает, но если я изменить контроллер и сделать то же самое (изменить вид и изменить контроллер), широковещательные прибывающие к старому контроллеру ,
Кто-нибудь знает почему? Или как это исправить?
Правильно, я сделал это сейчас. Теперь он не транслируется на старый контроллер, но он вообще не транслируется (линия широковещания выполняется, но она не приходит к закрытию $. Это работает в первый раз, хотя и только один раз. что не имеет значения, вернусь ли я к просмотру, который работал в первый раз, он больше не работает, если я не перезагружу страницу. –
Он транслирует, но что-то нужно слушать. Если этот контроллер не является " t активен, тогда ничего не слушает ... у вас есть другой прослушиватель, определенный в другом месте? –
Второй контроллер очень похож, а также имеет $ на куске кода. Должен ли я сделать что-то большее? Когда я создаю экземпляр второго контроллера, первая строка (до $ on) - это вызов, который запускает трансляцию. Делаю ли я что-то не так? –