3 回答
TA贡献1777条经验 获得超3个赞
怎么
$rootScope.$broadcast
办?$rootScope.$broadcast
正在通过应用程序范围发送事件。该应用程序的所有子级范围都可以使用以下简单方法来捕获它:$scope.$on()
。当您想要到达不是直接父级的范围(例如,父级的分支)时,发送事件特别有用
!!! 但是,要做的一件事是
$rootScope.$on
从控制器使用。$rootScope
是应用程序,当控制器被销毁时,事件侦听器将仍然存在,而当再次创建控制器时,它将堆积更多的事件侦听器。(因此,一次广播将被多次捕获)。使用$scope.$on()
代替,听众也将被销毁。$rootScope.$broadcast
&和有$rootScope.$broadcast.apply
什么区别?有时您必须使用
apply()
,尤其是在使用指令和其他JS库时。但是,由于我不知道该代码库,因此我无法确定是否是这种情况。
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)}
})
TA贡献1877条经验 获得超1个赞
$ rootScope。$ broadcast是引发所有子范围侦听的“全局”事件的便捷方法。您只需使用$rootScope广播消息,因为所有后代作用域都可以侦听该消息。
根作用域广播事件:
$rootScope.$broadcast("myEvent");
任何子级Scope都可以侦听该事件:
$scope.$on("myEvent",function () {console.log('my event occurred');} );
为什么我们使用$ rootScope。$ broadcast?您可以$watch用来侦听变量更改,并在变量状态更改时执行功能。但是,在某些情况下,您只想引发一个事件,应用程序的其他部分可以侦听该事件,而不管作用域变量状态如何变化。这是$broadcast有帮助的。
- 3 回答
- 0 关注
- 1001 浏览
添加回答
举报