为什么我们在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
之间有什么区别?
$rootScope.$broadcast
做什么?
$rootScope.$broadcast
正在通过应用程序范围发送一个事件。 该应用程序的任何子范围都可以使用简单的$scope.$on()
来捕获它。
当您希望到达不是直接父级的范围时发送事件尤其有用(例如,父级的分支)
! 有一两件事却不要做的是使用$rootScope.$on
从控制器。 $rootScope
是应用程序,当你的控制器被销毁时,事件监听器仍然存在,并且当你的控制器再次被创建时,它将会堆积更多的事件监听器。 (所以一次广播将被多次捕捉)。 使用$scope.$on()
代替,并且侦听器也将被销毁。
$rootScope.$broadcast
& $rootScope.$broadcast.apply
?有什么区别?
有时你必须使用apply()
,尤其是在处理指令和其他JS库时。 但是因为我不知道这个代码库,所以我无法分辨这是否是这种情况。
$rootScope
基本上用作事件监听器和调度器。
要回答它如何使用的问题,请与rootScope.$on
一起使用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.$on("myEvent",function () {console.log('my event occurred');} );
为什么我们使用$ rootScope。$ broadcast? 您可以使用$watch
来监听变量更改并在变量状态更改时执行函数。 但是,在某些情况下,只需要引发应用程序的其他部分可以侦听的事件,而不考虑范围变量状态的任何更改。 这是$broadcast
有用的时候。