我沒解決問題。我還在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耦合... –
您是否曾經解決過這個問題? –