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?
完美。这解决了我们的问题。感谢您的明确答案。 –
不知何故,这只适用于浏览器视图。尽快我尝试这个包裹在手机上(例如离子),然后同样的行为返回。在浏览器中模拟移动设备时出现同样的问题(chrome)。它似乎不是一个CSS或HTML(重叠后退按钮)的问题。移动设备上的国家历史行为有何不同? –
UI-Router状态行为在浏览器与移动设备之间是独立的。但是,离子可能会增加一些自己的处理。一般来说,你不应该遇到差异。但检查视图缓存问题,也许这里http://*.com/a/34417037/1679310 –