为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们在AngularJS中使用$ rootScope。$ broadcast?

为什么我们在AngularJS中使用$ rootScope。$ broadcast?

慕无忌1623718 2019-10-25 10:50:15
试图找到AngularJS的一些基本信息$rootScope.$broadcast,但是AngularJS文档并没有太大帮助。简单地说,我们为什么要使用它?另外,在约翰·帕帕(John Papa)的Hot Towel模板中,通用模块中有一个自定义函数$broadcast:function $broadcast() {    return $rootScope.$broadcast.apply($rootScope, arguments);}我不明白这是怎么回事。因此,这是几个基本问题:1)怎么$rootScope.$broadcast办?2)$rootScope.$broadcast和之间有什么区别$rootScope.$broadcast.apply?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

  1. 怎么$rootScope.$broadcast办?

    $rootScope.$broadcast正在通过应用程序范围发送事件。该应用程序的所有子级范围都可以使用以下简单方法来捕获它:$scope.$on()

    当您想要到达不是直接父级的范围(例如,父级的分支)时,发送事件特别有用

    !!! 但是,要做的一件事是$rootScope.$on从控制器使用。$rootScope是应用程序,当控制器被销毁时,事件侦听器将仍然存在,而当再次创建控制器时,它将堆积更多的事件侦听器。(因此,一次广播将被多次捕获)。使用$scope.$on()代替,听众也将被销毁。

  2. $rootScope.$broadcast&和有$rootScope.$broadcast.apply什么区别?

    有时您必须使用apply(),尤其是在使用指令和其他JS库时。但是,由于我不知道该代码库,因此我无法确定是否是这种情况。


查看完整回答
反对 回复 2019-10-25
?
MM们

TA贡献1886条经验 获得超2个赞

$rootScope 基本上充当事件侦听器和调度程序。


为了回答如何使用的问题,它与rootScope.$on; 结合使用。


$rootScope.$broadcast("hi");


$rootScope.$on("hi", function(){

    //do something

});

但是,将它$rootScope用作您自己的应用程序的常规事件服务是一种不好的做法,因为您很快就会陷入每个应用程序都依赖$ rootScope的情况,并且您不知道哪些组件正在侦听哪些事件。


最佳做法是为您要收听或广播的每个自定义事件创建服务。


.service("hiEventService",function($rootScope) {

    this.broadcast = function() {$rootScope.$broadcast("hi")}

    this.listen = function(callback) {$rootScope.$on("hi",callback)}

})


查看完整回答
反对 回复 2019-10-25
?
冉冉说

TA贡献1877条经验 获得超1个赞

$ rootScope。$ broadcast是引发所有子范围侦听的“全局”事件的便捷方法。您只需使用$rootScope广播消息,因为所有后代作用域都可以侦听该消息。


根作用域广播事件:


$rootScope.$broadcast("myEvent");

任何子级Scope都可以侦听该事件:


$scope.$on("myEvent",function () {console.log('my event occurred');} );

为什么我们使用$ rootScope。$ broadcast?您可以$watch用来侦听变量更改,并在变量状态更改时执行功能。但是,在某些情况下,您只想引发一个事件,应用程序的其他部分可以侦听该事件,而不管作用域变量状态如何变化。这是$broadcast有帮助的。


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 953 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信