我正在使用Angular + material-ui,基本上我想用不同的步骤进行入职流程,所以我使用的是tabs指令,每个指令都有不同的ui-view
。
HTML:
<div ng-controller="TabsCtrl" class="content" ng-show="$root.loadingComplete">
<md-tabs md-selected="$root.selectedIndex" md-border-bottom class="md-primary">
<md-tab id="tab1" md-on-select="goTo('start')">
<md-tab-label>Welcome</md-tab-label>
<md-tab-template>
<md-content>
<div ui-view="vStart"></div>
</md-content>
</md-tab-template>
</md-tab>
<md-tab id="tab2" md-on-select="goTo('personal')">
<md-tab-label>Personal</md-tab-label>
<md-tab-template>
<md-content>
<div ui-view="vPersonal"></div>
</md-content>
</md-tab-template>
</md-tab>
这是我的路线配置:
angular.module('onboarding').config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('start', {
url: '/:memberId',
views: {
vStart: {
templateUrl: 'views/start.html',
controller: 'StartCtrl'
}
}
})
.state('personal', {
url: '/:memberId/personal',
views: {
vPersonal: {
templateUrl: 'views/personal.html',
controller: 'PersonalCtrl'
}
}
})
...
函数goTo(status):
$scope.goTo = function(state) {
$state.transitionTo(state, $stateParams);
};
问题主要是如果我在网址localhost:9000/#/12345
打开“主页”它工作正常,我会看到开始视图,我可以用
$rootScope.selectedIndex = 1;
$state.transitionTo('personal', $stateParams);
但是,如果我直接从localhost:9000/#/12345/personal
打开网址,则不会发生任何操作,视图未加载且控制器未加载。
我有一个console.log('start controller')
和console.log('personal controller')
来检查它们何时加载。
此外,浏览器历史记录无效,例如我转到开始页面locahost:9000/#/12345
,然后点击按钮转到localhost:9000/#/12345/personal
一切都很好但是如果我回到浏览器历史记录网址为localhost:9000/#/1245
(正确),但视图完全为空,根本没有加载控制器。
答案 0 :(得分:0)
您的路由似乎已关闭。 UI路由器将子状态的URL附加到其父状态。
尝试删除标题/:memberId
:
.state('personal', {
url: '/personal',
views: {
vPersonal: {
templateUrl: 'views/personal.html',
controller: 'PersonalCtrl'
}
}
})