将$ emit和$ broadcast结合起来是一个好习惯吗?

时间:2016-02-04 08:53:57

标签: angularjs

我知道$ emit和$ broadcast之间的区别但是我想知道将两者结合起来是一个好习惯,而层次结构在未来可能会更复杂吗?

考虑以下情况:

  • 我在主视图(Parent1)中有两个邻居视图(让我们称之为Child1,Child2),我想在两个邻居之间传递一个事件。
  • 将来,Child1,Child2视图可能会有未来的父母。

在我的下面示例中,我将“唤醒”字符串从Child1传递给Child2(而Parent1是传递此数据的字符串)。 技术上发生的一步一步:

  1. Child1发送'唤醒'($ emit)
  2. Parent1捕获($ on)此事件,并发送给子2($ broadcast)
  3. 通知Child2($ on)
  4. 代码:

    function ControllerParent1($scope) {
        $scope.$on('myEmit', function(event, args) {
            $scope.$broadcast('myBroadcast', args.message); //Step2
        };
    }
    
    function ControllerChild1($scope) {
        $scope.$on('myEmit', function(event, args) {
            $scope.$emit('send', {message: 'wake up'}); //Step1
        });        
    }
    
    function ControllerChild2($scope) {
        $scope.$on('myBroadcast', function(event, args) {
            $scope.message = args.message; //Step3
        });
    }
    

    现在这对我来说非常技术性,我对这种做法感到疑惑,这是正确的角度工作方式吗?将来处理可能会更复杂。

1 个答案:

答案 0 :(得分:0)

如果您愿意为将来的应用程序提供证明,可以使用pub / sub模式。通过这种方式,您的控制器可以发布他们想要的事件并将其描述为他们感兴趣的任何事件,而无需($scope/$rootScope).($emit/$broadcast)上的强耦合。

有关本文的更多信息:http://eburley.github.io/2013/01/31/angularjs-watch-pub-sub-best-practices.html

这里有一个示例实现:https://github.com/georapbox/angular-PubSub