javascript - 从服务向控制器发出事件不会在 ng-repeat 上加载菜单
问题描述
我正在尝试$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>
解决方案
推荐阅读
- java - 如何在非接口非抽象类中使用 JDBI @Transaction 注解?
- javascript - 从函数中的异步调用返回响应
- ios - 未找到无法识别的模块映射文件 Release-iphonesimulator/YogaKit/YogaKit.modulemap'
- python - 如何使用 python 从 json 中提取内部字符串元素?
- javascript - Javascript API 提交错误
- r - 我可以使用 R dplyr 中的“summarise_all”函数计算所有列的标准误差吗
- three.js - 从 hitTest.face.normal 获取全局法线
- html - 我的页脚元素有问题:不会停留在页面底部
- php - 如何使用 .htaccess 在代码点火器中访问带有 .php 扩展名的控制器(Branding.php),例如 http://localhost/myproject/branding.php
- visual-studio - 在发布 Visual Studio 时将版本添加到文件夹名称