单击按钮时使用$ broadcast发送数据,并使用$ scope。$ on获取该数据

时间:2015-11-12 19:28:12

标签: javascript html angularjs events angular-ui-router

我希望功能按钮点击$来自服务器的广播数据,然后调用$ state.go('new-route')。在这个新状态的控制器中,我想要检索该数据。但是当我尝试用$ on来获取数据时,它是未定义的,事件不是在监听......下面你可以找到我的代码。

MainController

'use strict';

angular.module('app').controller('MainController', ['$scope', '$state',
    function ($scope, $state) {

      $scope.takeData = null;

      //Here i am getting data from server
      $scope.takeData = dataFromServer;

      $scope.buttonClick = function () {
            $scope.$broadcast('send-data', $scope.takeData);
            $state.go('newstate');
        };

    }
]);

查看主控制器

<div ng-controller="MainController">
    <div class="col-md-12">
            <div class="btn-group">
                <button class="btn btn-default" ng-click="buttonClick ()"><i
                        class="fa fa-edit"></i> {{Click Button}}
                </button>
            </div>
    </div>
</div>

新控制器

'use strict';

angular.module('app').controller('MainController', ['$scope', '$state',
    function ($scope, $state) {

      $scope.$on('send-data', functiopn(e, data){
            $scope.getData = data;  
      });

     $scope.useData = function(){
       // Here i want to use retrieved data
       console.log($scope.getData);
      //this returns undefined
     }

    }
]);

1 个答案:

答案 0 :(得分:0)

$scope.$broadcast只有在你的“新控制器”是“MainController”的子节点时才有效,是这样的吗?

如果没有,您可以重新安排控制器,以便“MainController”是“新控制器”的父控制器

如果要将它们保留为兄弟控制器,则将$rootScope注入每个控制器,然后使用$rootScope.$broadcast$rootScope.$on来监听事件。我相信$rootScope.$broadcast适用于兄弟控制器。