在过去的几天里,我们一直在为我们的 REST 服务编写一个新的基于 angular.js 的前端。到目前为止,事情进展顺利,我们已经构建了许多小页面和组件。
我们现在开始将这些东西集成到一个完整的应用程序中,并且想知道如何处理基于两个不同菜单的主视图。
我们希望所有这三个组件都根据一些全局状态进行更改。理想情况下由$routeProvider
基于 url 控制。
我们可以想出几种方法来做到这一点。然而,它们似乎都不正确,我们没有找到关于 Angular 开发人员如何设想这样做的明确文档。
一些精简的片段:
索引.html
<!DOCTYPE html>
<html data-ng-app="myapp">
<head>
....snip...
</head>
<body>
<div id="system-menu" data-ng-controller="MenuCtrl" data-ng-include="'partials/menu/system.html'"></div>
<div id="main">
<div id="main-menu" data-ng-controller="MenuCtrl" data-ng-include="'partials/menu/main.html'"></div>
<div id="content" data-ng-view></div>
</div>
</body>
应用程序.js
var myapp = angular.module('myapp', ['ngResource', 'ui']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/messages', {
templateUrl: 'partials/messages.html',
controller: MessagesCtrl
}).
when('/messages/:messageId', {
templateUrl: 'partials/messages.html',
controller: MessagesCtrl
}).
...snip...
otherwise({
redirectTo: '/messages'
});
}]);
当用户单击指向 /messages/1 的链接时,我希望将控制器 messagesCtrl 用于视图。这很简单,并且可以按照上面的说明工作。然而,我的 MenuCtrl 并没有“注意到”这种情况发生,并且手动广播一条消息以让它知道页面更改,因此它可以显示子菜单对我来说似乎很难看。因为此消息的唯一原因是更新菜单会导致其他控制器的一些不需要的知识。
到目前为止,我们喜欢关于 angular.js 的文档,但它似乎在大局中缺乏。
任何人都可以为我们提供一个链接或一些关于惯用方式的指示吗?