2016-04-05 21 views
9

Ho un tabset dinamico che genera le schede da una matrice che inizia in bianco. Quando aggiungo un nuovo elemento all'array appare come una nuova scheda. Voglio che l'ultima scheda aggiunta sia quella attiva. Ho impostato l'indice attiva ogni volta aggiungo un elemento alla matriceImpostazione della scheda attiva su schede create dinamicamente con UI Bootstrap angolare

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); 
}; 

Qui sta la Plunk per il codice sorgente completo della demo: https://plnkr.co/edit/TX6ek4R62AfM2zUXcoC3?p=preview

Il problema è che sembra funzionare solo con il numero dispari di schede. Ecco cosa voglio dire:

Il carico iniziale che appare così:

enter image description here

Dopo aggiungo una nuova scheda che mostra quella attiva correttamente:

enter image description here

Quando ho aggiungi un altro non viene selezionato nulla e la variabile activeTabIndex diventa indefinita:

enter image description here

E al 3 ° lo si inizia a lavorare di nuovo:

enter image description here

Così, per numeri di indice anche attivi (0, 2) funziona benissimo. Ma in qualche modo invece di Acitve Index: 1 mostra vuoto e non imposta la scheda attiva. Scrivo la variabile su console e visualizza tutti i valori correttamente.

Qualsiasi aiuto/suggerimenti/idee sono benvenuti.

Grazie.

risposta

14

Secondo docs:

attiva (default: Indice di prima scheda) - Indice attivo di scheda. Impostando questo su un indice di tabulazione esistente, questa scheda diventerà attiva.

Verificare la matrice linguette contiene quella attiva, penso che si dovrebbe aggiungere un $ timeout c'è:

 $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); 
     }; 

https://plnkr.co/edit/q4QP7zoB0HXSjn3MplE4?p=preview

+2

Grazie. Timeout sembra fare il trucco, ma ancora non riesco a capire perché funziona la metà del tempo senza di esso. Qualche commento su quel comportamento apparentemente strano? –

+0

Buona domanda, mi sento anche confuso perché funziona per le schede dispari. –

+3

Ho fatto questa domanda su GitHub e il PM del progetto ha risposto che problemi simili sono stati segnalati e non supportano le schede dinamiche. Sembra che impostare l'indice all'interno di timeout sia la soluzione raccomandata ufficialmente. Quindi lo accetterò come risposta. Per completezza ecco il thread che ho ricevuto la risposta: https://github.com/angular-ui/bootstrap/issues/611 –

Problemi correlati