Próbuję wywołać zdarzenie na $ rootScope za każdym razem, gdy wywoływane jest wywołanie ajax.AngularJS: potrzeba wywoływania zdarzenia za każdym razem, gdy wywoływane jest wywołanie ajax
var App = angular.module('MyApp');
App.config(function ($httpProvider) {
//add a transformRequest to preprocess request
$httpProvider.defaults.transformRequest.push(function() {
//resolving $rootScope manually since it's not possible to resolve instances in config blocks
var $rootScope = angular.injector(['ng']).get('$rootScope');
$rootScope.$broadcast('httpCallStarted');
var $log = angular.injector(['ng']).get('$log');
$log.log('httpCallStarted');
});
});
Zdarzenie "httpCallStarted" nie jest uruchamiane. Podejrzewam, że nie jest właściwe używanie $ rootScope lub jakiejkolwiek innej usługi instancji w blokach konfiguracji. Jeśli tak, jak mogę uzyskać zdarzenie za każdym razem, gdy rozpoczyna się wywołanie http, bez konieczności przekazywania obiektu konfiguracyjnego za każdym razem, gdy wykonuję połączenie?
Z góry dziękuję
Jestem prawie pewny, że wywołania do kątowego injektora (['ng']) są tam, gdzie idziesz źle. To nie daje ci funkcji wtryskiwacza, która jest aktualnie używana z twoją aplikacją, więc kiedy próbujesz uzyskać $ rootScope, dostajesz inny $ rootScope niż ten, którym myślisz, że jesteś. Jedyny sposób, w jaki wiem, jak uzyskać prawdziwy wtryskiwacz, to użycie funkcji angle.element (someselector) .injector(), a następnie możesz wywołać .get ("$ rootScope") na ten temat. Nie wiem jednak, czy nadal będziesz mieć problemy z robieniem tego w bloku konfiguracji. –