在过去的几天里,我们一直在为我们的REST服务编写一个基于angular.js的新前端。到目前为止,事情正在顺利进行,并且我们已经建立了许多小页面和组件。在Angular中同步多个视图
我们现在开始把这些东西整合成一个完整的应用程序,但是不知道如何处理基于两种不同的菜单的主视图。
我们希望所有这三个组件都基于某种全局状态进行更改。理想情况下由基于url的$routeProvider
控制。
我们可以想到几种方法来做到这一点。然而,他们中没有一个看起来是正确的,我们没有找到关于角度开发人员如何设想完成的明确文档。
有些降低片段:
的index.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>
app.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'
});
}]);
当用户点击的链接/消息/ 1我想控制器messagesCtrl是用于视图。这很容易,并且如上所述发挥作用。不过,我的MenuCtrl不会“注意”这种情况发生,并且手动广播一条消息让它知道页面变化,因此它可以显示子菜单对我来说似乎很难看。因为这条消息的唯一原因是更新菜单导致对其他控制器不需要的知识。
到目前为止,我们喜欢上angular.js的文档,但似乎缺乏在大画面的部门。
任何人都可以向我们提供的惯用的方式做到这一点的链接或一些指针?
这很好地解释了控制器间的通讯,谢谢。然而,它并没有以一种干净的方式解决我的问题。 让我试着更具体: 当用户点击链接到/消息/ 1我希望控制器messagesCtrl用于视图。这很容易,并且如上所述发挥作用。然而,我的MenuCtrl并没有“注意到”这种情况发生,并手动广播一条消息让它知道页面变化,因此它可以显示子菜单对我来说似乎很难看。因为这条消息的唯一原因是更新菜单导致对其他控制器不需要的知识。 – martijnve