Передача события из сервиса в контроллер не загружает меню по ng-repeat - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь $emit событие от службы, которая сообщит моему контроллеру, когда загрузить меню.Он работает, когда загружается при построении DOM, но не при событии $ on.

Проблема заключается в том, что меню не создается после отправки события по ng-repeat.

Если выизначально запустить loadMenu() меню получается нормально ...

angular.module('app',[])

.controller('mainCtrl',function(appState, $rootScope){
  var vm = this;
  
 /*
  * This would show the menu but I only want to show it when 'loadMenu' is emitted
  * loadMenu();
  */
  
  function loadMenu() {
    vm.menuItems = [
      {name: 'settings'},
      {name: 'home'}
    ];
  }
  
  var watchMenu = $rootScope.$on('loadMenu', function() {
     console.log('LOAD THE MENU');
     loadMenu();
  });
  
  vm.emitMenu = function() {
    appState.emitMenu();
  }
})

.service('appState', function($rootScope) {
    var service = this;
    service.data = {};
    
    service.emitMenu = function() {
      $rootScope.$emit('loadMenu');
    }
    
    return service;
});
<html ng-app="app">
 <body>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-controller="mainCtrl as vm">
  <div>
      <ul ng-repeat="menu in vm.menuItems">
        <li>
          <a href="">
            <span ng-bind="menu.name"></span>
          </a>
        </li>
      </ul>
    </div>

   <button type="button" ng-click="vm.emitMenu()">Emit</button>
</div>
  </body>
 </html>
...