如何从http拦截器广播?

Tjo*_*rie 5 angularjs q

使用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);
                },
...
Run Code Online (Sandbox Code Playgroud)

在我的导航控制器中(它处理并将加载器/微调器绑定到视图):

$rootScope.$watch('spin', function(event) {
    console.info('spin');
    $scope.spinner++;
});
Run Code Online (Sandbox Code Playgroud)

广播似乎只在收到的所有回复结束时发生一次,即使我可以看到很多请求!在控制台日志中.

我该如何管理我的全局微调器/加载器?

编辑 我想在加载数据时在导航栏中显示加载器/微调器.

Bri*_*sio 4

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

$on函数正是您想要的,因为它将监听广播事件。

$rootScope.$on('spin', function(msg, data) {
    console.info('spin');
    $scope.spinner++;
});
Run Code Online (Sandbox Code Playgroud)

如果您好奇的话,我整理了一个完整的工作示例:

http://codepen.io/BrianGenisio/pen/wIBHz