使用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)
广播似乎只在收到的所有回复结束时发生一次,即使我可以看到很多请求!在控制台日志中.
我该如何管理我的全局微调器/加载器?
编辑 我想在加载数据时在导航栏中显示加载器/微调器.
该$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