猿问

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

试图找到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?


慕无忌1623718
浏览 1002回答 3
3回答

慕森王

怎么$rootScope.$broadcast办?$rootScope.$broadcast正在通过应用程序范围发送事件。该应用程序的所有子级范围都可以使用以下简单方法来捕获它:$scope.$on()。当您想要到达不是直接父级的范围(例如,父级的分支)时,发送事件特别有用!!! 但是,要做的一件事是$rootScope.$on从控制器使用。$rootScope是应用程序,当控制器被销毁时,事件侦听器将仍然存在,而当再次创建控制器时,它将堆积更多的事件侦听器。(因此,一次广播将被多次捕获)。使用$scope.$on()代替,听众也将被销毁。$rootScope.$broadcast&和有$rootScope.$broadcast.apply什么区别?有时您必须使用apply(),尤其是在使用指令和其他JS库时。但是,由于我不知道该代码库,因此我无法确定是否是这种情况。

MM们

$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)}})

冉冉说

$ rootScope。$ broadcast是引发所有子范围侦听的“全局”事件的便捷方法。您只需使用$rootScope广播消息,因为所有后代作用域都可以侦听该消息。根作用域广播事件:$rootScope.$broadcast("myEvent");任何子级Scope都可以侦听该事件:$scope.$on("myEvent",function () {console.log('my event occurred');} );为什么我们使用$ rootScope。$ broadcast?您可以$watch用来侦听变量更改,并在变量状态更改时执行功能。但是,在某些情况下,您只想引发一个事件,应用程序的其他部分可以侦听该事件,而不管作用域变量状态如何变化。这是$broadcast有帮助的。
随时随地看视频慕课网APP

相关分类

AngularJS
我要回答