Angularjs 如何从http拦截器进行广播?
使用AngularJS 1.2 我的拦截器如下所示:Angularjs 如何从http拦截器进行广播?,angularjs,q,Angularjs,Q,使用AngularJS 1.2 我的拦截器如下所示: $httpProvider.interceptors.push(['$q', '$log', '$rootScope', function ($q, $log, $rootScope) { return { 'request': function(config) { $rootScope.$broadcast('spin');
$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);
},
...
在my nav controller(处理加载器/微调器并将其绑定到视图)中:
虽然我可以看到许多请求,但在收到的所有响应结束时,广播似乎只发生一次!在控制台日志中
我必须如何管理全局微调器/加载器
编辑
每当加载数据时,我希望在导航栏中显示一个加载程序/微调器。您应该在模块运行功能中使用on,而不是使用watcher
angular.module('test',[]).run(['$rootScope' function ($rootScope) {
$rootScope.$on("$spin", function () {
// set the spinner here
});
}]);
$watch
功能不侦听广播消息。它监视范围的变化。在本例中,只要$rootScope.spin
发生更改,就会立即调用函数(默认情况下),这就是您被调用一次的原因
$on
功能是您在这里想要的,因为它是收听广播事件的功能
$rootScope.$on('spin', function(msg, data) {
console.info('spin');
$scope.spinner++;
});
如果您有兴趣,我将提供一个完整的工作示例:
您希望通过使用this@Ajaybeniwal编辑:添加目的我可以在此处找到有关
run
和$on
和$broadcast
的更多信息吗?
$rootScope.$on('spin', function(msg, data) {
console.info('spin');
$scope.spinner++;
});