【发布时间】:2016-09-17 05:23:27
【问题描述】:
当我的应用程序第一次加载时,它会加载 app.dit 页面,但是一旦您开始单击选项卡后,选项卡就不会显示为活动状态,因此我想在应用程序加载时使第一个选项卡 DIT 处于活动状态。如何使用以下代码完成该任务?
main.html
<uib-tabset active="active">
<uib-tab ng-repeat="tab in tabs" select="go(tab.route)" heading="{{tab.heading}}" active="tab.active" disable="tab.disabled">
<!--<div ui-view="">{{tab.route}}</div>-->
</uib-tab>
</uib-tabset>
ctrl.js
$scope.tabs = [{
heading: 'DIT',
route: 'app.dit',
active: true
}, {
heading: 'ST',
route: 'app.st',
active: false
}, {
heading: 'UAT',
route: 'app.uat',
active: false
}, ];
$scope.go = function(route) {
$state.go(route);
};
function active(route) {
return $state.is(route);
}
$scope.active = active;
$scope.$on("$stateChangeSuccess", function() {
$scope.tabs.forEach(function(tab) {
tab.active = active(tab.route);
});
});
app.js
$urlRouterProvider.otherwise(function($injector) {
var $state = $injector.get('$state');
$state.go('app.dit');
});
$stateProvider
.state('app', {
abstract: true,
url: '',
templateUrl: 'web/global/main.html',
controller: 'MainCtrl'
})
.state('app.dit', {
url: '/dit',
templateUrl: 'view/partials/dit.html',
controller: 'DitCtrl'
})
.state('app.st', {
url: '/st',
templateUrl: 'view/partials/st.html',
controller: 'StCtrl'
})
.state('app.uat', {
url: '/uat',
templateUrl: 'view/partials/uat.html',
controller: 'UatCtrl'
})
.state('app.prod', {
url: '/prod',
templateUrl: 'view/partials/prod.html',
controller: 'ProdCtrl',
})
;
【问题讨论】:
-
我不明白为什么您需要
<uib-tabs>,而您所做的只是使用它们进行导航。仅使用标签 html 和ui-sref和ui-sref-active作为链接不是更简单吗? -
很难说你在共享代码时做错了什么......你能发布一个最小的提琴手、plunkr 或类似的东西吗?
-
@charliefl 这也是我的想法,但我的要求强制我使用 uib-tabs。
-
@Robert 抱歉没有访问 jsfiddle 等,我列出了与问题相关的所有内容
-
我不明白...可以实现完全相同的显示并使其更简单而无需使用它们。仍然可以从数组中渲染每个选项卡,因此模板 html 不会更大
标签: javascript html angularjs angular-ui-bootstrap