UI-路由器4级状态

问题描述:

我们是在具有以下多层次导航树项目:UI-路由器4级状态

main { 
    inactive 
    profile 
    active 
    admin { 
    settings 
    registration 
    activePupil 
    activeAdmin 
    emergencyDetail { 
     photos 
    } 
    } 
} 

和实际代码:

$stateProvider 
    // this state is placed in the <ion-nav-view> in the index.html 
    .state('main', { 
     url: '/main', 
     abstract: true, 
     templateUrl: 'main/templates/menu.html', 
     controller: 'MenuCtrl as menu' 
    }) 
    .state('main.inactive', { 
     url: '/inactive', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/inactive.html', 
      controller: 'InactiveCtrl as inactive' 
     } 
     } 
    }) 
    .state('main.profile', { 
     url: '/profile', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/profile.html', 
      controller: 'ProfileCtrl as profile' 
     } 
     } 
    }) 
    .state('main.active', { 
     url: '/active', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/active.html', 
      controller: 'ActiveCtrl as active' 
     } 
     } 
    }) 
    .state('main.admin', { 
     url: '/admin', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/admin.html', 
      controller: 'AdminCtrl as admin' 
     } 
     } 
    }) 
    .state('main.adminSettings', { 
     url: '/admin/settings', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/admin-settings.html', 
      controller: 'AdminSettingsCtrl as adminsettings' 
     } 
     } 
    }) 
    .state('main.adminRegistration', { 
     url: '/admin/registration', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/admin-registration.html', 
      controller: 'AdminRegistrationCtrl as adminregistration' 
     } 
     } 
    }) 
    .state('main.adminActivePupils', { 
     url: '/admin/active/pupils', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/pupils-active.html', 
      controller: 'PupilsActiveCtrl as pupilsactive' 
     } 
     } 
    }) 
    .state('main.adminActiveAdmins', { 
     url: '/admin/active/admins', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/admin-active.html', 
      controller: 'AdminActiveCtrl as adminactive' 
     } 
     } 
    }) 
    .state('main.adminEmergencyDetail', { 
     url: '/admin/emergency/:id', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/admin-emergency-detail.html', 
      controller: 'AdminEmergencyCtrl as adminemergency' 
     } 
     } 
    }) 
    .state('main.adminEmergencyDetailPhotos', { 
     url: '/admin/emergency/:id/photos', 
     views: { 
     'pageContent': { 
      templateUrl: 'main/templates/admin-emergency-photos.html', 
      controller: 'AdminEmergencyCtrl as adminemergency' 
     } 
     } 
    }); 
    $urlRouterProvider.otherwise('/main/inactive'); 

遗憾的是,现有的答案是不帮助我们。 Angular UI-Router的维基也是如此。我们应该如何改变规定,像...

$state.go('main.admin.emergencyDetail.photos') 

...是可能的,所以回到main.admin.emergencyDetail将成为可能?

似乎(如果我理解这个问题),你可以只改变当前平板态结构为分级一个。而已。

通常情况下,孩子应该注入其内容为父母的观点,但我们甚至可以保持逻辑,所有的孩子都瞄准盛大父(主)视图:

// admin will stay 
.state('main.admin', { 
    url: '/admin', 
    views: { 
    'pageContent': { ... } 
    } 
})  
// state nesting starts here 
.state('main.adminEmergencyDetail', { 
    // no need the use parent url .. it will be inherited 
    //url: '/admin/emergency/:id', 
    url: '/emergency/:id', 
    views: { 
    // target is main view 
    //'pageContent': { ... } 
    '[email protected]': { ... } 
    } 
}) 
// same for all other siblings of the EmergencyDetail 
... 
// and grand child 
.state('main.admin.EmergencyDetail.Photos', { 
    // grand parent and parent url will be already in play 
    //url: '/admin/emergency/:id/photos', 
    url: '/photos', 
    views: { 
    // target is main view 
    //'pageContent': { ... } 
    '[email protected]': { ... } 
    } 
}); 

现在我们可以去美国如需要

$state.go('main.admin.emergencyDetail.photos', {id: 12345}); 

注:所有儿童都注入其观点,为主要对象“pageContent”。我建议增加一个目标,到每个状态(即到管理和emergencyDetail),因此,儿童不更换母

一些示例有工作plunker

Nested states or views for layout with leftbar in ui-router?

+1

完美。这解决了我们的问题。感谢您的明确答案。 –

+0

不知何故,这只适用于浏览器视图。尽快我尝试这个包裹在手机上(例如离子),然后同样的行为返回。在浏览器中模拟移动设备时出现同样的问题(chrome)。它似乎不是一个CSS或HTML(重叠后退按钮)的问题。移动设备上的国家历史行为有何不同? –

+0

UI-Router状态行为在浏览器与移动设备之间是独立的。但是,离子可能会增加一些自己的处理。一般来说,你不应该遇到差异。但检查视图缓存问题,也许这里http://*.com/a/34417037/1679310 –