为什么我们在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有用的时候。

    链接地址: http://www.djcxy.com/p/77807.html

    上一篇: Why do we use $rootScope.$broadcast in AngularJS?

    下一篇: AngularJS module: this versus $scope