5

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

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

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

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

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

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

4

2 回答 2

4

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

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

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

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

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

于 2013-08-28T10:36:44.070 回答
3

而不是使用观察者,你应该只在模块运行功能中使用

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

}]);
于 2013-08-28T10:20:39.723 回答