javascript - Angular Scope 事件(通过 `$broadcast` 发送)会进入事件队列吗?

标签 javascript angularjs

我正在尝试$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 ,因此它们会立即被解雇而不被放入事件队列中是有道理的。这是一个可视化: enter image description here

就像 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/

相关文章:

javascript - 从外部文件到指令的 Angular 广播数据

javascript - 如何以 Angular 设置匿名子范围设置

javascript - 归内还是外为?

javascript - 如何使用javascript读取文件并在页面上显示数据

javascript - 马科和 Koajs : Why is my async-fragment rendering not working?

javascript - 使用 Electron 打包器构建应用程序后,javascript 找不到图像

javascript - ENOENT 错误 - 我已成功上传文件,但无法移动它们

javascript - 将 css 类添加到 Angularjs 中的标记元素

jquery - 使用后退按钮隐藏和显示同一部分中的另一个表

angularjs - ng-required 与 Angular ui-ace