Angular $广播不起作用.

Fra*_*ain 17 angularjs angularjs-scope

我试图在$ scope$ scope.$ broadcast的两个控制器之间共享信息.

这是观点:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
        {{content}}
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

和控制器:

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

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

掠夺者

我在这做错了什么?

kam*_*lkp 44

子控制器尚未实例化.包裹broadcast在一个timeout作品: http://plnkr.co/edit/MF7P16K1OTv46JNgkkih?p=preview

$timeout(function(){
   $scope.$broadcast('someEvent', 'bidule');
});
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是一个糟糕的黑客.除非我在我的大型应用程序中添加"500"ms延迟,否则它不起作用. (11认同)
  • 如果这是一个糟糕的黑客,如何正确解决Angular 1.x中的问题? (2认同)

Far*_*ook 9

孩子没有发起.面对同样的问题,这是我的解决方案.

.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); 
}])
Run Code Online (Sandbox Code Playgroud)

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