我制作<tabset>
视图以显示页面中的内容。我也在使用
Bootstrap's Tabs and Lazy Data Loading以便特定选项卡的控制器仅在其处于活动状态时进行初始化。我能够为标签实现延迟加载。
<div id="panel" ng-controller="HomeController as hmctrl">
<tabset>
<tab class="nav-item" id="tab_content" title="Tab1" template-url="app/components/tab1/tab1.html"></tab>
<tab class="nav-item" id="tab_content" title="Tab2" template-url="app/components/tab2/tab2.html"></tab>
<tab class="nav-item" id="tab_content" title="Tab3" template-url="app/components/tab3/tab3.html"></tab>
</tabset>
</div>
在我的app.config中,我只有一个主页面路径
var app = angular.module('myApp', ['bootstrap.tabset','ngRoute']);
app.config(
function($routeProvider,$locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'app/components/home/homeView.html'
});
});
对于每个标签,都有一个单独的控制器。
我想知道如何以这种方式创建路由到任何特定选项卡。这样我就可以使用$location.path()
函数导航到它们。
我在这里创建了一个同样的plnkr Plnkr for the above described scenario
答案 0 :(得分:3)
在这种情况下,你应该使用$ stateProvider而不是$ routeProvider。 我在这里分叉了你的傻瓜 - https://plnkr.co/edit/lL9JVRmuE8kQ5f0WhRDo?p=preview
var app = angular.module('myApp', ['bootstrap.tabset','ngRoute','ui.router']);
app.config(
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("/Home");
$stateProvider
.state('Home', {
url: "/Home",
templateUrl: "home.html"
})
.state('Home.Tab1', {
url: "/Tab1",
templateUrl: "tab1.html"
})
.state('Home.Tab2', {
url: "/Tab2",
templateUrl: "tab2.html"
})
.state('Home.Tab3', {
url: "/Tab3",
templateUrl: "tab3.html"
});
});
Index.html - 使用ui-view代替ng-view
<div class="ui-view"></div>
Home.html中
<div id="panel" ng-controller="HomeController as hmctrl">
<p>Home</p>
<tabset>
<tab class="nav-item" id="tab_content" title="Tab1" ui-sref=".Tab1"></tab>
<tab class="nav-item" id="tab_content" title="Tab2" ui-sref=".Tab2"></tab>
<tab class="nav-item" id="tab_content" title="Tab3" ui-sref=".Tab3"></tab>
</tabset>
<div ui-view></div>
</div>
网址为#/ Home / Tab1,#/ Home / Tab2,#/ Home / Tab3,您可以通过以下方式强制导航到州:
$state.go("Home.Tab2");//navigates to Tab2 of Home page
有关州提供商的更多信息 - https://github.com/angular-ui/ui-router
确保您引用状态提供程序脚本并在应用程序中注入此模块
答案 1 :(得分:0)
您可以为每个标签添加单独的路线,
app.config(
function($routeProvider,$locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'app/components/home/homeView.html'
controller:'HomeCtrl'
});
.when('/Tab1', {
templateUrl: 'app/components/tab1/Tab1.html',
controller:'Tab1Ctrl'
});
})
答案 2 :(得分:0)
您可以使用$routeParams
服务。请看下面的示例代码。
更改路线配置以包含标签标识符。
app.config(
function($routeProvider,$locationProvider) {
$routeProvider
.when('/:tabId', {
templateUrl: 'app/components/home/homeView.html',
controller:'HomeController'
});
});
然后在您的HomeController
中,您可以访问$routeParams
服务以获取tabId
的当前值。
app.controller('HomeController', function($scope, $routeParams) {
$scope.activeTab = $routeParams.tabId;
});
相应地设置制表符的活动属性。
<tab active="{{activeTab == 1}}" class="nav-item" id="tab_content" title="Tab1" template-url="app/components/tab1/tab1.html" active="{{activeTab == 1}}"></tab>
<tab active="{{activeTab == 2}}" class="nav-item" id="tab_content" title="Tab2" template-url="app/components/tab2/tab2.html"></tab>
<tab active="{{activeTab == 3}}" class="nav-item" id="tab_content" title="Tab3" template-url="app/components/tab3/tab3.html"></tab>
然后,您可以将标签称为<baseurl>/1
,<baseurl>/2