使用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++;
});
广播似乎只在收到的所有回复结束时发生一次,即使我在控制台日志中可以看到很多 request!。
我该如何管理我的全局微调器/加载器?
修改 我希望在加载数据时在导航栏中显示加载器/微调器。
答案 0 :(得分:4)
$watch
函数不侦听广播消息。它会监视范围的变化。在这种情况下,只要$rootScope.spin
发生变化就会调用一个函数,这会立即被调用(默认情况下),这就是你被调用一次的原因。
$on
函数就是你想要的,因为它会监听广播事件。
$rootScope.$on('spin', function(msg, data) {
console.info('spin');
$scope.spinner++;
});
如果你很好奇,我已经把一个完整的工作示例放在一起:
答案 1 :(得分:3)
您应该只使用模块运行功能
,而不是使用观察程序angular.module('test',[]).run(['$rootScope' function ($rootScope) {
$rootScope.$on("$spin", function () {
// set the spinner here
});
}]);