Antwort

37

Zum Hinzufügen von Routing verwenden Sie in der Regel eine ng-view-Direktive. Ich bin mir nicht sicher, ob es einfach genug ist, angular UI zu modifizieren, um das zu unterstützen, wonach du suchst, aber here's a plunker zeigt ungefähr, was ich denke, wonach du suchst (es ist nicht unbedingt die beste Art, es zu tun - hoffentlich kann dir jemand eine geben bessere Lösung oder verbessern auf diese)

+1

Dies ist die beste Antwort. Machen Sie sich nicht einmal mit den eckigen-ui-Bootstrap-Tab-Direktiven auf; Implementiere es einfach mit ngRoute. Ich habe gerade einen [Plunk] (http://plnr.co/1xA1r2) aufgebaut, der es demonstrierte, und wollte gerade meine eigene Antwort posten, bevor ich merkte, dass es genauso war wie deine. – user240515

+0

Ich mag das waayay besser als der Angular UI Bootstrap Ansatz. Was ich sowieso nicht verstehe, btw. Ich sehe keinen wirklichen Grund, Bootstrap.js in benutzerdefinierten eckigen Anweisungen neu zu erstellen. Diese müssen getrennt sein, um die besten Teile von Winkel- und Bootstrap zu verwenden. Disclaimer: das ist mein 2ct. –

+0

Beachten Sie im Plunk wie, wenn Sie zwischen Tabs navigieren und dann zurück navigieren (drücken Sie die Zurück-Taste auf der Tastatur), die richtige Ansicht wird gerendert, aber die richtige aktive Registerkarte ist nicht? Sehen Sie dies für eine Lösung: http://StackOverflow.com/a/25735997/410937 – atconway

1

Sie Ihre eigenen benutzerdefinierten Schlüsselwert-Paare in der Routendefinition passieren könnte und dies zu erreichen. hier ist ein gutes Beispiel: http://www.bennadel.com/blog/2420-Mapping-AngularJS-Routes-Onto-URL-Parameters-And-Client-Side-Events.htm

+0

Nur Link-Antworten sind nicht erlaubt. Lesen Sie die stackoverflow-Hilfe. – jgauffin

+1

Fassen Sie die Lösung so zusammen, dass Ihre Antwort ohne den Link funktioniert, und ich entferne den Downvote. – user240515

5

ich auch diese Anforderung habe, und ich bin etwas Ähnliches wie die Antwort von Chris zur Verfügung gestellt zu tun, aber ich bin auch mit AngularUI router, weil ngRouter nicht verschachtelten Ansichten nicht unterstützt und es ist möglich, Sie haben die Tabs Content View in einer anderen Ansicht (ich tat) und das wird nicht mit ng-View arbeiten.

0

nur eine kleine Add Antwort akzeptiert: i benötigt, um die aktuelle Registerkarte auf Aktualisierung der Seite zu halten, so benutzte ich einen Schalter wie folgt aus:

$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

mit dem Einsatz von UI-Router Agree die Zustände verfolgt und funktioniert hervorragend mit verschachtelten Ansichten. Spricht besonders Ihren Bootstrap Tabs Problem gibt es eine große Implementierung, die UI-Router nutzt: UI-Router Tabs

15

Verwendung daten target = „# tab1“. Arbeitete für mich

+0

Danke, dass die gelöste Winkelroute aufgerufen wird, wenn Sie auf eine Registerkarte klicken – David

+0

Dies ist eine großartige Antwort, wenn Sie andere Elemente auf der Seite haben, von denen Sie nicht möchten, dass das Routing von einer Route wegführt. +1 :) –

1

Wenn Sie eine Route namens Einstellungen haben und Sie auf dieser Einstellungsseite Registerkarten haben möchten, funktioniert so etwas.

<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

Dies wäre meine beste Lösung, obwohl ich nur # entfernen! in href = "#!/settings # private_email". Der Vorteil ist, dass Sie keinen js-Code hinzufügen müssen, nur pure # Navigation. –

0

Ich habe Tabs mit Routing die folgende Art und Weise zu arbeiten.

Es ist in der Lage, alles, was Sie wollen, von dynamischen Tabs, und es ist eigentlich sehr einfach.

  • Tabs mit einem ui-view, so dass es dynamisch Vorlagen laden kann,
  • Update-Routing in URL
  • Sets Geschichte Zustand
  • Wenn direkt mit einer Registerkartenansicht auf eine Route navigieren, die richtigen Registerkarte markiert als active.

Definieren Sie die Registerkarten mit einem Parameter in Ihrem Router

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

Die Registerkarten Vorlage (tabs.html) ist

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

, die mit einem sehr einfachen Controller gepaart ist für Erhalten der aktuellen aktiven Registerkarte:

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