0

Ich habe einen Code, der eine Schaltfläche mit einem ng-klick enthält, die, wenn gedrückt wird, eine neue Registerkarte zum Tabs-Array hinzufügt.AngularJS - Aktives Tabset setzen nach dem Löschen irgendwas

<div class="btn btn-primary" ng-click="add()">Add</div> 

$scope.add = function() 
    { 
    $scope.tabs.push({heading: 'new', content: 'ddddddd'}); 

    $timeout(function() 
    { 
     $scope.active = $scope.tabs.length; 
    }); 
    } 

Dann wird das Array gefüllt und showd in der Ansicht:

<uib-tabset active="active"> 
    <uib-tab ng-repeat="tab in tabs" index="$index + 1"> 
     <uib-tab-heading>{{ tab.heading }} - <a ng-click="remove($index)">remove</a></uib-tab-heading> 
     {{tab.content}} 
     </uib-tab> 
    </uib-tabset> 

Auch jeder Lasche eine Link Entfernen, die diese Funktion aufruft:

$scope.remove = function(index) 
    { 
    $scope.tabs.splice(index, 1); 
    $scope.active = $scope.tabs.length; 
    } 

Das Problem ist, dass Wenn ich eine Registerkarte lösche, die nicht die zuletzt hinzugefügte Registerkarte ist, sind die aktive Registerkarte und der Index nicht identisch. Es gibt eine Plunkr, um das Problem zu demonstrieren: http://plnkr.co/edit/02Lll7oPYyvAxcKu5GkK?p=preview Wie Sie sehen können, wenn eine Registerkarte (nicht die letzte) gelöscht wird, sind "Tabs" und "Index" Variablen nicht identisch.

Irgendwelche Ideen bitte?

+0

Welche Registerkarte Sie wollen aktiv setzen, wenn jede gelöscht? –

+0

Wenn ich eine Registerkarte löschen möchte, möchte ich keine neue aktive Registerkarte festlegen, sondern einfach die zuletzt aktive Registerkarte beibehalten. Das Problem kommt, wenn nach dem Löschen eines Tabs ich ein neues Tab hinzufügen. In diesem Moment möchte ich diese neue Registerkarte aktivieren, aber ich erhalte keine Ergebnisse. –

Antwort

0

Momentan unterstützt das eckige Bootstrap nicht die dynamische Generierung von Registerkarten. Aber wenn Sie möchten $timeout Lösung funktioniert. können Sie mehr von here

Sie für timeout eine Funktion definieren müssen lesen, die darauf achten, wird Reiter ausgewählt, dass bei jedem beliebigen vorhandenen neuen Tab oder entfernen gehen hinzuzufügen. Seine Take-ID des Tabs, der zuletzt in der Tabliste enthalten ist.

function callTimeOut(tabNoIndex) { 

     $timeout(function() { 
      $scope.active = tabNoIndex; 
     }, 0); 
     } 

Ihre Registerkarte Array wie diese mit tabNo als Verschluss Eigenschaft aussehen sollte. Dies wird keine Tabs verfolgen, die bisher erstellt wurden, da uitab die Tab-ID nicht neu anordnet, sobald sie entfernt oder hinzugefügt wird. Sie müssen sich um dieses kümmern.

$scope.tabs.push({ 
      heading: 'new', 
      content: 'ddddddd', 
      id: ++tabNo 
     }); 

Ihre Funktion zum Hinzufügen und Entfernen sollte wie folgt aussehen.

$scope.add = function() { 
     $scope.tabs.push({ 
      heading: 'new', 
      content: 'ddddddd', 
      id: ++tabNo 
     }); 

     callTimeOut($scope.tabs.length); 

     } 


     $scope.remove = function(index) { 
     $scope.tabs.splice(index, 1); 

     var tabIndex = $scope.tabs[$scope.tabs.length - 1].id; 
     callTimeOut(tabIndex); 
     } 

hier ist die Arbeits Plunker

+2

Ihr Plunker funktioniert nicht richtig. Beachten Sie, dass wenn Sie eine Registerkarte entfernen, die nicht die letzte Registerkarte ist, und dann eine neue hinzufügen, wird der Index null und keine Registerkarte ausgewählt. –

Verwandte Themen