回答

37

要添加路由,通常使用ng-view指令。我不確定很容易修改角度用戶界面以支持您要查找的內容,但here's a plunker大致顯示了我認爲您要查找的內容(這不一定是實現此目的的最佳方式 - 希望有人可以爲您提供這個更好的解決或改善)

+1

這是最好的答案。不要擔心angular-ui-bootstrap選項卡指令;只需使用ngRoute來實現它。實際上我只是設置了一個[Plunk](http://plnkr.co/1xA1r2)來展示它,並且準備發佈我自己的答案,然後才發現它與你的相同。 – user240515

+0

我比這個Angular UI Bootstrap方法更喜歡這個waaay。反正我不明白btw。我沒有看到將Bootstrap.js重建爲自定義角度指令的真正原因。那些需要分開來利用角度和自舉的最佳部分。免責聲明:這純粹是我的2ct。 –

+0

請注意,如果您在標籤之間導航然後導航回來(按下鍵盤上的返回按鈕),如何顯示正確的視圖,但正確的活動標籤不是?看到這個解決方案:http://stackoverflow.com/a/25735997/410937 – atconway

5

我也有這個要求,我做類似於克里斯提供的答案的東西,但我還使用​​,因爲ngRouter不支持嵌套的意見,並有可能你會在另一個視圖(我做過)中看到標籤內容視圖,這對ng-view不起作用。

0

只是一個小的添加到接受的答案: 我需要保持當前選項卡頁面刷新,所以我用這樣的開關:

$scope.tabs = [ 
      { link : '#/furnizori', label : 'Furnizori' }, 
      { link : '#/total', label : 'Total' }, 
      { link : '#/clienti', label : 'Clienti' }, 
      { link : '#/centralizator', label : 'Centralizator' }, 
      { link : '#/optiuni', label : 'Optiuni' } 
     ]; 

     switch ($location.path()) { 
      case '/furnizori': 
       $scope.selectedTab = $scope.tabs[0]; 
       break; 

      case '/total': 
       $scope.selectedTab = $scope.tabs[1]; 
       break; 

      case '/clienti': 
       $scope.selectedTab = $scope.tabs[2]; 
       break; 

      case '/centralizator': 
       $scope.selectedTab = $scope.tabs[3]; 
       break; 

      case '/optiuni': 
       $scope.selectedTab = $scope.tabs[4]; 
       break; 

      default: 
       $scope.selectedTab = $scope.tabs[0]; 
       break; 
     } 
2

同意使用UI-路由器的跟蹤狀態和嵌套視圖非常有效。說到特別的你的引導標籤的問題有很大的實現,它利用UI路由器:UI-Router Tabs

15

使用的數據目標=「#TAB1」。爲我工作

+0

謝謝,解決了點擊標籤時被調用的角度路由 – David

+0

當頁面上的其他元素不希望路由導航時,這是一個很好的答案。 +1 :) –

1

如果你有一個稱爲設置的路線,並且你想在該設置頁面中有標籤,就像這樣工作。

<div class="right-side" align="center"> 
    <div class="settings-body"> 
     <ul class="nav nav-tabs"> 
      <li class="active"><a data-toggle="tab" href="#!/settings#private_email">Private email</a></li> 
      <li><a data-toggle="tab" href="#!/settings#signature">Signature</a></li> 
      <li><a data-toggle="tab" href="#menu2">Menu 2</a></li> 
     </ul> 

     <div class="tab-content"> 
      <div id="private_email" class="tab-pane fade in active"> 
      <div class="row" ng-controller="SettingsController"> 
       <div> 
        <button class="btn btn-primary" ng-click="activatePrivateEmail()">Activate email</button> 
        <button class="btn btn-danger">Deactivate email</button> 
       </div> 
      </div> 
      </div> 
      <div id="signature" class="tab-pane fade"> 
       <textarea ui-tinymce="tinymceOptions" ng-model="signature"></textarea> 
       <div class="send-btn"> 
       <button name="send" ng-click="" class="btn btn-primary">Save signature</button> 
       </div> 
      </div> 
      <div id="menu2" class="tab-pane fade"> 
      <h3>Menu 2</h3> 
      <p>Some content in menu 2.</p> 
      </div> 
     </div> 
    </div> 
</div> 
+0

這將是我最好的解決方案,但我只是刪除#!在href =「#!/ settings#private_email」。好處是你不需要添加任何js代碼,只需要純粹的#導航。 –

0

我得到的路由工作方式如下標籤。

它能夠從動態選項卡完成所需的任何操作,而且其實非常簡單。

  • 標籤與ui-view,這樣可以動態加載模板,在URL
  • 更新路由
  • 集歷史狀態
  • 當直接導航到路由與標籤視圖,正確的標籤標記爲active

定義一個帶參數的標籤在你的路由器

.state('app.tabs', { 
    url   : '/tabs', 
    template : template/tabs.html, 
}) 
.state('app.tabs.tab1', { 
    url   : '/tab1', 
    templateUrl : 'template/tab1.html', 
    params  : { 
     tab   : 'tab1' 
    } 
}) 
.state('app.visitors.browser.analytics', { 
    url   : '/tab1', 
    templateUrl : 'template/tab2.html', 
    params  : { 
     tab   : 'tab2' 
    } 
}) 

的標籤模板(tabs.html)是

<div ng-controller="TabCtrl as $tabs"> 
    <uib-tabset active="$tabs.activeTab"> 
     <uib-tab heading="This is tab 1" index="'tab1'" ui-sref="app.tabs.tab1"></uib-tab> 
     <uib-tab heading="This is tab 2" index="'tab2'" ui-sref="app.tabs.tab2"></uib-tab> 
    </uib-tabset> 
    <div ui-view></div> 
</div> 

這是一個非常簡單的控制器配對獲取當前活動標籤:

app.controller('TabCtrl', function($stateParams) { 
    this.activeTab = $stateParams.tab; 
}) 
相關問題