Angularjs ui路由器自动重定向出状态
我有以下路线:Angularjs ui路由器自动重定向出状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有以下路线: .state('app.base.patient', { url: '/store/:storeID/patient/:patientID', template: template, controller: patientCtrl, controllerAs: 'vm', resolve: { patientObj: ['$stateParams', 'patientResource', function($statePar
.state('app.base.patient', {
url: '/store/:storeID/patient/:patientID',
template: template,
controller: patientCtrl,
controllerAs: 'vm',
resolve: {
patientObj: ['$stateParams', 'patientResource', function($stateParams, patientResource) {
if ($stateParams.patientID !== '') {
return patientResource.get($stateParams.patientID);
}
return null;
}]
}
});
我可以通过应用程序很好地导航到它(使用$state.go)
这让我想到(例如):
但当我尝试使用相同的url刷新页面时,我会被重定向到:
'/store/105/patient/'
你知道这是什么原因吗?我已经添加了越来越多的日志,但我看不到任何明显错误的地方
“父”视图是商店选择视图:
$stateProvider
.state('app.base.store', {
url: '/store',
template: template,
controller: storeCtrl,
controllerAs: 'vm'
});
您的URL指示应该嵌套状态,但状态定义并不反映这一点。您的患者状态应嵌套在存储状态中。患者的状态将变为如下所示:
.state('app.base.store.patient', {
url: '/patient/:patientID',
template: template,
controller: patientCtrl,
controllerAs: 'vm',
resolve: {
patientObj: ['$stateParams', 'patientResource', function($stateParams, patientResource) {
if ($stateParams.patientID !== '') {
return patientResource.get($stateParams.patientID);
}
return null;
}]
}
});
$stateProvider
.state('app.base.store', {
url: '/store/:storeID',
template: template,
controller: storeCtrl,
controllerAs: 'vm'
});
同时,您的门店状态如下所示:
.state('app.base.store.patient', {
url: '/patient/:patientID',
template: template,
controller: patientCtrl,
controllerAs: 'vm',
resolve: {
patientObj: ['$stateParams', 'patientResource', function($stateParams, patientResource) {
if ($stateParams.patientID !== '') {
return patientResource.get($stateParams.patientID);
}
return null;
}]
}
});
$stateProvider
.state('app.base.store', {
url: '/store/:storeID',
template: template,
controller: storeCtrl,
controllerAs: 'vm'
});
然后,只要视图嵌套正确,就可以从存储视图导航到患者状态,如下所示:
ui-sref="app.base.store.patient({patientID: vm.patientID})"
或在控制器代码中,如下所示:
$state.go("app.base.store.patient", { storeID: vm.storeID, patientID: vm.patientID });
这个问题原来是个无赖
this.$state.go('app.base.patient', {storeID: value.id, patientID: null});
我最初添加了显式patientID:null,因为我认为它是必需的-它不是,并且在加载期间会导致上述问题。您能显示其余的状态定义吗?app.base.patient是否嵌套在app.base状态中?那个州的定义是什么样子的?当然,编辑原始问题的细节作为评论是太小了好吧,很好的捕捉,但没有去悲伤。我已按如下方式更新了路径:app.base.store app.base.patient这是因为store视图不是父视图(流程为select store->select user,但用户选择器是一个完整的独立视图),刷新api.base.patient中的页面仍将删除患者id:/当您刷新api.base.store中的页面时会发生什么情况,您是否也会丢失storeID?应用程序的正常流程如下:1。进入站点(“/”)将重定向到/store/(没有店铺id的app.base.store)2。选择门店id后,将重定向到/store/storeID/patient/,但未选择任何患者。3.因此,我以前从未尝试进入/store/storeID路由,但它似乎会自动重定向到/store/storeID/patient/(又称添加/patient/),很明显我们的结构很糟糕(我以前从未使用过ui路由器,并加入了一个半构建的应用程序)但我希望它接受一个/store/storeID url而不重定向?你能创建一个plunker来复制吗。