J'ai un onglet dynamique qui génère les onglets à partir d'un tableau qui commence blanc. Lorsque j'ajoute un nouvel élément au tableau, il apparaît sous la forme d'un nouvel onglet. Je veux que le dernier onglet ajouté soit actif. Je règle l'index actif chaque fois que j'ajoute un élément au tableau
HTML:
<uib-tabset active="activeTabIndex">
<uib-tab ng-repeat="tab in tabs" heading="{{tab.title}}">Some content</uib-tab>
</uib-tabset>
JavaScript:
$scope.activeTabIndex = 0
$scope.tabs = [];
$scope.addTab = function() {
var newTab = { title: 'Tab ' + ($scope.tabs.length + 1) };
$scope.tabs.Push(newTab);
$scope.activeTabIndex = ($scope.tabs.length - 1);
console.log($scope.activeTabIndex);
};
Voici le Plunk pour le code source complet de la démo: https://plnkr.co/edit/TX6ek4R62AfM2zUXcoC3?p=preview
Le problème est qu'il semble fonctionner uniquement avec un nombre impair d'onglets. Voici ce que je veux dire:
Au chargement initial, il ressemble à ceci:
Après avoir ajouté un nouvel onglet, l’affichage actif s’affiche correctement:
Quand j'en ajoute un autre, rien n'est sélectionné et la variable activeTabIndex devient indéfinie:
Et sur le 3ème ça recommence à fonctionner:
Donc, même pour les index actifs (0, 2), cela fonctionne bien. Mais quelque part, au lieu de Acitve Index: 1, il est vide et ne définit pas l'onglet actif. J'écris la variable à la console et il affiche toutes les valeurs correctement.
Toute aide/pointeurs/idées sont les bienvenues.
Merci.
Selon docs :
active (Par défaut: Index du premier onglet) - Index actif de l'onglet. Si vous définissez ceci sur un index de tabulation existant, cet onglet sera actif.
Assurez-vous que le tableau tabs contient celui qui est actif, je pense que vous devriez ajouter un timeout $:
$scope.addTab = function() {
var newTab = { title: 'Tab ' + ($scope.tabs.length + 1) };
$scope.tabs.Push(newTab);
$timeout(function(){
$scope.activeTabIndex = ($scope.tabs.length - 1);
});
console.log($scope.activeTabIndex);
};
J'ai eu le même problème, mais un peu plus complexe. J'ai chargé mes onglets dynamiques à partir de l'API. J'avais un onglet statique et le reste était dynamique.
<uib-tabset active="activeTabIndex" ng-if="showTabs">
<uib-tab heading="Static Heading">Static content</uib-tab>
<uib-tab data-ng-repeat="tab in tabs" heading="{{tab.title}}">Some content</uib-tab>
</uib-tabset>
J'ai utilisé deux variables avec des valeurs par défaut:
$scope.showTabs = false;
$scope.activeTabIndex = 0;
D'abord, j'ai chargé mes onglets dynamiques à partir de l'API, puis dans le rappel de réussite, j'ai spécifié la valeur de activeTabIndex
à partir du tableau d'onglets. Ensuite, j'ai changé la valeur de showTabs
en true.
Je l'ai partagé, j'espère juste que cela pourra aider plus de gens avec cette affaire.