ui-router自动重定向到状态

时间:2016-02-18 14:03:54

标签: angularjs angular-ui-router

我有以下路线:

.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) 这让我(例如):

'/store/105/patient/8a7f7e785279bc1f015279be7cb40001'

但是当我尝试使用相同的网址刷新页面时,我会被重定向到:

'/store/105/patient/'

任何可能导致此问题的想法?我一直在添加越来越多的日志,但我看不到任何看起来很明显的错误

“父”视图是商店选择视图:

$stateProvider
.state('app.base.store', {
    url: '/store',
    template: template,
    controller: storeCtrl,
    controllerAs: 'vm'
});

2 个答案:

答案 0 :(得分:0)

您的网址表明状态应该嵌套,但状态定义并未反映出来。您的患者状态应嵌套在您的商店状态中。患者状态将改为这样:

.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 });

答案 1 :(得分:0)

问题原来是一个流氓

this.$state.go('app.base.patient', {storeID: value.id, patientID: null});

我最初添加了显式的patientID:null,因为我认为它是必需的 - 它没有,并且会在加载过程中导致上述问题。