Angular $广播不起作用。

时间:2014-02-27 16:52:45

标签: angularjs angularjs-scope

我正在尝试使用$scope.$on$scope.$broadcast在两个控制器之间共享信息。

以下是观点:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
        {{content}}
    </div>
</div>

和控制器:

.controller('ParentCtrl', ['$scope', function($scope) { 
    $scope.$broadcast('someEvent', 'bidule');
}])

.controller('ChildCtrl', ['$scope', function($scope) { 
    $scope.$on('someEvent', function(event, b) {
        $scope.content = b;
    });
}])

plunker

我在这里做错了什么?

3 个答案:

答案 0 :(得分:44)

子控制器尚未实例化。将broadcast包含在timeout作品中: http://plnkr.co/edit/MF7P16K1OTv46JNgkkih?p=preview

$timeout(function(){
   $scope.$broadcast('someEvent', 'bidule');
});

答案 1 :(得分:8)

未启动儿童。面对同样的问题,这是我的解决方案。

.controller('ParentCtrl', ['$scope', function($scope) { 
    $scope.$on('initiateEvent', function(event, b) {
        $scope.$broadcast('someEvent', 'bidule');
    } 
}])
.controller('ChildCtrl', ['$scope', function($scope) { 
    $scope.$on('someEvent', function(event, b) {
        $scope.content = b;
    });
    $scope.$emit('initiateEvent', null); 
}])

在这里,我正在启动孩子,并要求家长广播someEvent

答案 2 :(得分:3)

要播放一个事件,您只需要调用它即可。

以下代码完美无缺:

您的观点:

<div ng-controller="ParentCtrl" ng-click="myFunc()">
    <div ng-controller="ChildCtrl">
        {{content}}
    </div>
</div>

和您的控制人员:

.controller('ParentCtrl', ['$scope', function($scope) {
    $scope.myFunc = function() { 
        $scope.$broadcast('someEvent', 'bidule');
    }
}])

.controller('ChildCtrl', ['$scope', function($scope) { 
    $scope.$on('someEvent', function(event, b) {
        $scope.content = b;
    });
}])

希望它有所帮助!