Я пытаюсь $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>