我没解决问题。我还在angular-ui github上发布了这个消息,他们的回应基本上是这样的,“好吧,这种情况并不是真正的路由器设计的,所以如果你想要更好的状态管理,把数据放入参数并亲自看看他们,并执行你所需要的任何逻辑“。我有点觉得这是ui-router设计的,所以我扩展了一下(没有源代码的变化)来实现这一点。解决方案是抽象状态,假“关闭”状态,路由器URL中的参数以及扩展$ urlRouterProvider服务的组合。
首先延长$ urlRouterProvider:
urlRouterProvider.when(/^((?!leftpanel).)*$/, ['$state', '$location', function ($state, $location) {
//we've got just /app or /app/3434, nothing that contains /leftpanel, so turn off
$state.transitionTo("off");
}]);
然后补充说, “关闭” 状态:
appModule.constant('LEFT_PANEL_STATES', function() {
var leftPanelRoot = {
name: 'root.leftpanel', //mandatory
template: '',
url: "/app/:primaryId/leftpanel",
views:{
'[email protected]': {
templateUrl: "partials/leftpanel_container_partial.html",
controller:"LeftPanelRootCtrl",
resolve: {
//etc
}
}
},
"abstract":true //makes this view only viewable from one of its child states
};
var leftPanelItemsList = {
name: 'root.leftpanel.itemslist', //mandatory
parent: leftPanelRoot, //mandatory
url: "/items-list",
views:{
'[email protected]': {
templateUrl: "partials/leftpanel_items_list.html",
controller:"LeftPanelItemsListCtrl",
resolve: {
//etc
}
}
}};
var leftPanelListDetail = {
name:"root.leftpanel.itemslist.detail",
parent:leftPanelItemsList,
url:"/:id/detail",
views:{
"detail":{
templateUrl:"partials/leftpanel_item_detail.html",
controller:"LeftPanelItemListDetailCtrl"
}
}};
var leftPanelExtendedDetailList = {
name:"root.leftpanel.itemslist.extendedlist",
parent:leftPanelItemsList,
url:"/:id/extendedDetail/list",
views:{
"extendeddetaillist":{
templateUrl:"partials/leftpanel_extended_detail_list.html",
controller:"LeftPanelExtendedDetailListCtrl"
}
}};
你算出:
然后设置应用程序的路由的其余部分什么都没有?我真的很想知道如何做到这一点。我在这里添加了一个问题,https://github.com/angular-ui/ui-router/issues/306 –
我的理论是,如果您能够拥有独立于根范围的ui状态,则可以进行粒度控制在一个模块内。但是,它似乎直接与$ rootScope耦合... –
您是否曾经解决过这个问题? –