Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ui路由器自动重定向出状态_Angularjs_Angular Ui Router - Fatal编程技术网

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来复制吗。