Comment dire quel onglet bootstrap est sélectionné dans Angular-UI

y a-t-il un moyen de dire quel onglet a été sélectionné lors de l'utilisation des onglets Bootstrap dans Angulaire de l'INTERFACE utilisateur<!--4?

j'ai essayé de regarder le tableau de panes mais il ne semble pas être mis à jour lors de la commutation onglet. Peut-on spécifier une fonction de rappel lorsqu'un onglet est sélectionné?

mise à jour avec Exemple de code.

le code suit de très près l'exemple de L'IU Bootstrap angulaire page.

Syntaxe:

<div ng-controller="TabsDemoCtrl">
    <tabs>
        <pane ng-repeat="pane in panes" heading="{{pane.title}}" active="pane.active">
            <div ng-include="pane.template"></div>
        </pane>
    </tabs>
</div>

Contrôleur:

var TabsCtrl = function ($scope) {
  $scope.panes = [
    { title:"Events list", template:"/path/to/template/events" },
    { title:"Calendar", template:"/path/to/template/calendar" }
  ];
};
34
demandé sur Gal Margalit 2013-03-28 19:08:59

5 réponses

en fait c'est très simple comme chacun pane expose le active attribut supportant la liaison de données bidirectionnelle:

<tabs>
    <pane ng-repeat="pane in panes" heading="{{pane.title}}" active="pane.active">      
        {{pane.content}}
    </pane>
</tabs>

et ensuite un onglet actif peut être facilement trouvé, par exemple:

$scope.active = function() {
    return $scope.panes.filter(function(pane){
      return pane.active;
    })[0];
};

en Voici un qui fonctionne plunk

24
répondu pkozlowski.opensource 2018-07-26 06:22:19

si vous n'avez pas de répéteur, liez l'activité tabs (ou spans) à un tableau

 <tab active="tabActivity[0]">...</tab>
 <tab active="tabActivity[1]">...</tab>

et dans votre controller

$scope.tabActivity=[false,false];

alors vous pouvez obtenir l'onglet actif avec

$scope.tabActivity.indexOf(true)
13
répondu alban maillere 2014-10-21 23:57:28

Je l'ai résolu en ajoutant une méthode (onTabSelect) sur le contrôleur et en l'appelant à partir de l'événement ng-click De Tab. La solution ci-dessous a fonctionné pour moi s'il vous plaît le voir en action

function myTabController($scope) {
  $scope.onTabSelect = function(tabName) {
    $scope.selectedTabName = tabName;
    console.log("Changed tab to " + tabName);
  }


  <tabset>
    <tab ng-click="onTabSelect('A')">
      <tab-heading>
        A
      </tab-heading>
    </tab>
    <tab ng-click="onTabSelect('B')">
      <tab-heading>
        B
      </tab-heading>
    </tab>
  </tabset>
12
répondu Rupesh Kumar Tiwari 2014-10-28 20:56:17

ma réponse est pour le cas où vous placez manuellement l'onglet et vous utilisez la bibliothèque de boostrap d'interface angulaire, vous pouvez utiliser le select l'attribut

<uib-tabset class="main-nav">
  <uib-tab select="showTab('a')">
    <uib-tab-heading>a</uib-tab-heading>
    <div class="tab-content"> <span>a</span></div>
  </uib-tab>
  <uib-tab select="showTab('b')">
    <uib-tab-heading>b</uib-tab-heading>
    <div class="tab-content"> <span>b</span></div>
  </uib-tab>
</uib-tabset>

dans le showTab fonction passant par select l'attribut, vous pouvez vérifier si votre onglet est sélectionné par leur nom, comme dans mon cas.

L'exemple complet est ici angulaires de l'interface utilisateur, avis select:

2
répondu Tho Vo 2018-07-26 08:17:30

la réponse acceptée ne fonctionne que pour les onglets dynamiques.

pour les onglets statiques, vous pouvez définir le active l'attribut uib-tabset directive à une propriété scope, et comparez - la avec l'index de l'onglet pour trouver l'onglet actif.

par exemple, dans le code ci-dessous je le fais pour définir une classe sur l'en-tête de l'onglet actif (je peux utiliser le active classe ajoutée par l'interface utilisateur.bootstrap et obtenir le même résultat, je suis en train de faire ainsi, à titre d'exemple):

angular.module('test', ['ngAnimate', 'ui.bootstrap']);
@import url("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css");
 .test {
  background: dodgerblue;
}
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-animate.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-1.3.3.js"></script>

<div ng-app="test">
  <uib-tabset active="active">
    <uib-tab index="0">
      <uib-tab-heading ng-class="{test:active==0}">Static title1</uib-tab-heading>Static content1
    </uib-tab>
    <uib-tab index="1">
      <uib-tab-heading ng-class="{test:active==1}">Static title1</uib-tab-heading>Static content2</uib-tab>
    <uib-tab index="2">
      <uib-tab-heading ng-class="{test:active==2}">Static title1</uib-tab-heading>Static content3</uib-tab>
  </uib-tabset>
</div>
1
répondu T J 2016-06-15 09:54:23