Как я могу отправлять данные с основного контроллера для просмотра контроллера под углом?

Я хочу создать приложение в угловых.

У меня есть главный контроллер за пределами зрения и специальный контроллер для просмотра.

Как передать данные с главного контроллера на контроллер просмотра (домашний контроллер)?

Я хочу выполнить функцию в контроллере представления после передачи данных из главного контроллера.

Я пытался использовать - $emit а также $on но в моем случае это не работает.

Мой код для примера: https://jsfiddle.net/32hb3odk/7/

Index.html

<div ng-app="myApp">

 <div class="head-part" ng-controller="MainController as main">
 <h1>Header</h1>
 <input ng-click="main.EmitData()" type="button" value="Emit data to child control" />
 <br /> <br />
 </div>

  <div class="view-part">
  <h2>View:
  </h2>
  <div ng-view></div>
</div>


<script type=text/ng-template id=home.html>   
<div>{{home.title}}</div>
</script>

</div>

Javascript:

angular.module('myApp', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {

        $routeProvider
            .when('/', {
                controller: 'HomeController',
                controllerAs: 'home',
              templateUrl: 'home.html'
            })
                        .otherwise('/');
    }]);

angular.module('myApp').controller('HomeController', ['$scope',function ($scope) {
        var vm = this;
        vm.title = 'Homepage';
    $scope.$on('EmitMain', function(){
        alert("GetDataFromMainController");
    });
    }]);

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

        var vm = this;
        vm.EmitData = function(){
      $scope.$emit('EmitMain');
    }

    }]);

1 ответ

Решение

Это потому что $emit идет вверх по дереву. использование $broadcast вместо этого, поскольку это пересекает дерево вниз.

Другие вопросы по тегам