2016-04-05 9 views
9

Mam dynamiczny zestaw tabulacji, który generuje tabulacje z tablicy, która zaczyna się puste. Kiedy dodaję nowy element do tablicy, pojawia się on jako nowa karta. Chcę, aby ostatnia dodana karta była aktywną. I ustawić aktywny indeks za każdym razem dodać element do tablicyUstawianie aktywnej zakładki na dynamicznie tworzonych zakładkach z Angular UI Bootstrap

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

oto upadać na pełnym kodem źródłowym demo: https://plnkr.co/edit/TX6ek4R62AfM2zUXcoC3?p=preview

Problem polega na tym, że działa tylko z nieparzystą liczbą kart. Oto co mam na myśli:

Na wstępnym obciążeniem wygląda to tak:

enter image description here

Po dodaniu nowej karty pokazuje aktywną jedną poprawnie:

enter image description here

Kiedy dodaj jeszcze jedno, nic się nie wybiera i aktywna zmiennaTabIndex staje się niezdefiniowana:

enter image description here

A na 3. jeden zaczyna działać ponownie:

enter image description here

Więc nawet dla aktywnych numerów indeksowych (0, 2) działa prawidłowo. Ale jakoś zamiast Acitve Index: 1 pokazuje puste i nie ustawia aktywnej karty. Piszę zmienną do konsoli i poprawnie wyświetla wszystkie wartości.

Każda pomoc/wskazówki/pomysły są mile widziane.

Dzięki.

Odpowiedz

14

Według docs:

aktywny (Domyślnie: Indeks pierwszej zakładce) - Aktywny spis karcie. Ustawienie tego na istniejącym indeksie kart spowoduje, że karta będzie aktywna.

Zapewnienie tablica zakładki zawiera aktywny jeden, myślę, że należy dodać tam $ 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); 
     }; 

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

+2

Dzięki. Wydaje się, że limit czasu działa, ale nadal nie może zrozumieć, dlaczego działa bez niego na pół etatu. Wszelkie komentarze na temat tego pozornie dziwnego zachowania? –

+0

Dobre pytanie, ja też czuję się zagubiony, dlaczego działa na dziwne zakładki. –

+3

Zadałem to pytanie na GitHub, a premier projektu odpowiedział, że podobne problemy zostały zgłoszone i nie obsługują dynamicznych kart. Wygląda na to, że ustawienie wskaźnika w limicie czasu jest oficjalnie zalecanym rozwiązaniem. Więc przyjmuję to jako odpowiedź. Ze względu na kompletność oto wątek mam odpowiedź: https://github.com/angular-ui/bootstrap/issues/611 –

Powiązane problemy