Trả lời

37

Để thêm định tuyến, bạn thường sử dụng chỉ thị ng-view. Tôi không chắc rằng nó đủ dễ dàng để sửa đổi giao diện người dùng góc để hỗ trợ những gì bạn đang tìm kiếm, nhưng here's a plunker cho thấy những gì tôi nghĩ bạn đang tìm kiếm (nó không nhất thiết là cách tốt nhất để làm nó - hy vọng ai đó có thể cung cấp cho bạn giải pháp tốt hơn hoặc cải thiện về vấn đề này)

+1

Đây là câu trả lời hay nhất. Thậm chí không bận tâm với các chỉ thị tab angular-ui-bootstrap; chỉ cần thực hiện nó với ngRoute. Tôi thực sự chỉ cần thiết lập một [Plunk] (http://plnkr.co/1xA1r2) thể hiện nó, và chuẩn bị đăng câu trả lời của riêng tôi, trước khi tôi nhận ra rằng nó giống như câu trả lời của bạn. – user240515

+0

Tôi thích waaay này tốt hơn so với phương pháp tiếp cận Angular UI Bootstrap. Mà tôi không hiểu dù sao btw. Tôi không thấy lý do thực sự nào để xây dựng lại Bootstrap.js thành các chỉ thị góc tùy chỉnh. Những người cần phải được riêng biệt để sử dụng các phần tốt nhất của cả hai góc và bootstrap. Disclaimer: đây hoàn toàn là 2ct của tôi. –

+0

Thông báo trong plunk làm thế nào nếu bạn điều hướng giữa các tab và sau đó điều hướng trở lại (nhấn nút quay lại trên bàn phím), xem thích hợp được trả lại nhưng các tab hoạt động thích hợp không? Xem giải pháp này cho một giải pháp: http://stackoverflow.com/a/25735997/410937 – atconway

1

bạn có thể chuyển các cặp giá trị key tùy chỉnh của riêng bạn trong định nghĩa tuyến đường và đạt được điều này. đây là một ví dụ điển hình: http://www.bennadel.com/blog/2420-Mapping-AngularJS-Routes-Onto-URL-Parameters-And-Client-Side-Events.htm

+0

Chỉ cho phép liên kết câu trả lời. Đọc trợ giúp stackoverflow. – jgauffin

+1

Tóm tắt giải pháp sao cho câu trả lời của bạn hoạt động mà không có liên kết và tôi sẽ xóa bỏ phần ghi đè. – user240515

5

Tôi cũng có yêu cầu này và tôi đang làm một cái gì đó tương tự như câu trả lời cung cấp bởi Chris, nhưng tôi cũng đang sử dụng AngularUI router, vì ngRouter không hỗ trợ xem lồng nhau và có thể bạn sẽ có chế độ xem nội dung tab bên trong một chế độ xem khác (tôi đã làm) và điều đó sẽ không hoạt động với chế độ xem ng.

0

chỉ là một add nhỏ để chấp nhận câu trả lời: i cần thiết để giữ các tab hiện tại refresh trang vì vậy tôi sử dụng một công tắc như thế này:

$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

Đồng ý với việc sử dụng giao diện người dùng-Router mà theo dõi trạng thái và hoạt động tốt với các chế độ xem lồng nhau. Phát biểu đặc biệt là vấn đề tab Bootstrap của bạn có một thực hiện tuyệt vời mà thúc đẩy giao diện người dùng Router: UI-Router Tabs

15

Sử dụng dữ liệu-target = "# tab1". Làm việc cho tôi

+0

Cảm ơn, đã giải quyết tuyến đường góc được gọi khi nhấp vào tab – David

+0

Đây là câu trả lời tuyệt vời khi bạn có các yếu tố khác trên trang mà bạn không muốn định tuyến chuyển hướng. +1 :) –

1

Nếu bạn có một tuyến đường được gọi là cài đặt và bạn muốn có các tab trong trang cài đặt đó, một cái gì đó như thế này hoạt động.

<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

Đây sẽ là giải pháp tốt nhất của tôi, mặc dù tôi chỉ xóa #! in href = "#!/settings # private_email". Lợi ích là bạn không cần thêm bất kỳ mã js nào, chỉ có # điều hướng thuần túy. –

0

Tôi đã nhận các tab có định tuyến hoạt động theo cách sau.

Nó có thể thực hiện mọi thứ bạn muốn từ các tab động và nó thực sự rất đơn giản.

  • Tabs với một ui-view, vì vậy nó có thể tự động tải mẫu,
  • Cập nhật định tuyến trong URL
  • bang Set lịch sử
  • Khi điều hướng trực tiếp đến một con đường với một cái nhìn tab, tab chính xác được đánh dấu là active.

Xác định các tab với một tham số trong router của bạn

.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' 
    } 
}) 

Các tab mẫu (tabs.html) là

<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> 

nào được ghép nối với một bộ điều khiển rất đơn giản cho nhận tab hoạt động hiện tại:

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