Angular $broadcast не работает.

Я пытаюсь поделиться информацией между двумя контроллерами с $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

Что я здесь делаю неправильно?

Ответы

Ответ 2

Ребенок не инициирован.. Столкнулась с той же проблемой, и это было моим решением.

.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

Ответ 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;
    });
}])

Надеюсь, что это поможет!