Angularjs 如何从http拦截器进行广播?

Angularjs 如何从http拦截器进行广播?,angularjs,q,Angularjs,Q,使用AngularJS 1.2 我的拦截器如下所示: $httpProvider.interceptors.push(['$q', '$log', '$rootScope', function ($q, $log, $rootScope) { return { 'request': function(config) { $rootScope.$broadcast('spin');

使用AngularJS 1.2

我的拦截器如下所示:

        $httpProvider.interceptors.push(['$q', '$log', '$rootScope', function ($q, $log, $rootScope) {
            return {
                'request': function(config) {
                    $rootScope.$broadcast('spin');
                    console.info('request!');
                    return config || $q.when(config);
                },
...
在my nav controller(处理加载器/微调器并将其绑定到视图)中:

虽然我可以看到许多请求,但在收到的所有响应结束时,广播似乎只发生一次!在控制台日志中

我必须如何管理全局微调器/加载器

编辑
每当加载数据时,我希望在导航栏中显示一个加载程序/微调器。

您应该在模块运行功能中使用on,而不是使用watcher

angular.module('test',[]).run(['$rootScope' function ($rootScope) {
    $rootScope.$on("$spin", function () {
        // set the spinner here 
    });

}]);

$watch
功能不侦听广播消息。它监视范围的变化。在本例中,只要
$rootScope.spin
发生更改,就会立即调用函数(默认情况下),这就是您被调用一次的原因

$on
功能是您在这里想要的,因为它是收听广播事件的功能

$rootScope.$on('spin', function(msg, data) {
    console.info('spin');
    $scope.spinner++;
});
如果您有兴趣,我将提供一个完整的工作示例:


您希望通过使用this@Ajaybeniwal编辑:添加目的我可以在此处找到有关
run
$on
$broadcast
的更多信息吗?
$rootScope.$on('spin', function(msg, data) {
    console.info('spin');
    $scope.spinner++;
});