angularjs – 如何从http拦截器广播?

前端之家收集整理的这篇文章主要介绍了angularjs – 如何从http拦截器广播?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用AngularJS 1.2

@H_502_8@

我的拦截器看起来像这样:@H_502_8@

@H_502_8@

$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);
                },...

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

@H_502_8@

$rootScope.$watch('spin',function(event) {
    console.info('spin');
    $scope.spinner++;
});

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

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

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

解决方法

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

@H_502_8@

$on函数就是你想要的,因为它将收听广播事件.@H_502_8@

@H_502_8@

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

如果你很好奇,我已经把一个完整的工作示例放在一起:@H_502_8@

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

猜你在找的Angularjs相关文章