我正在尝试$broadcast
一个事件来指示正在发生某些AJAX,因此UI会禁用表单中的控件。目前看来这些事件不会进入事件队列并立即处理。
我正在编写的代码取决于这种行为,所以我想知道这有多可靠?一些权威链接会很有帮助(该文档没有提及任何具体内容)。
最佳答案
编辑 - 阅读您的评论后,构建具有依赖项注入(inject)和回调的队列系统可能更有意义。
app.factory('FirstService', function($rootScope, SecondService){
$rootScope.loading = true
.success(function(){
SecondService.AJAXCall();
});
})
.factory('SecondService', function($rootScope){
var vm = this;
vm.AJAXCALL = function(){
$rootScope.processing = true;
//AJAX Call
.complete(function(){
$rootScope.processing = false;
$rootScope.loading = false;
})
}
})
.controller('FirstController', function($rootScope){
var vm = this;
vm.loading = $rootScope.loading;
})
.controller('SecondController', function($rootScope){
var vm = this;
vm.processing = $rootScope.processing;
});
<div ng-controller="FirstController as first">
<form ng-disabled="first.loading"><form>
</div>
<div ng-controller="SecondController as second">
<img ng-show="second.processing" />
</div>
$广播
blasts the event down scope ,因此它们会立即被解雇而不被放入事件队列中是有道理的。这是一个可视化:
就像 muenchdo 建议的那样,您可能需要添加一个作用域变量来指示是否应启用/禁用控件。
将逻辑添加到 Controller :
app.module('AppCtrl', function($rootScope){
var vm = this;
vm.loading = $rootScope.loading;
});
然后将 ngDisabled 逻辑添加到 html 中:
<div ng-controller="AppCtrl as app">
<form ng-disabled="app.loading"><form>
</div>
然后在 AJAX 调用之前,设置 $rootScope
变量:
app.service($rootScope){
$rootScope.loading = true;
//AJAX CALL
.complete(function(){
$rootScope.loading = false;
});
}
关于javascript - Angular Scope 事件(通过 `$broadcast` 发送)会进入事件队列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32867531/