2016-04-05 13 views
9

空白で始まる配列からタブを生成する動的タブセットがあります。配列に新しい項目を追加すると、新しいタブとして表示されます。最後に追加したタブをアクティブなものにしたい。私は、配列に項目を追加するたびにアクティブなインデックスを設定角度UIブートストラップを使用して動的に作成されたタブでアクティブなタブを設定する

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

ここでは、デモの完全なソースコードのためのPlunkです:https://plnkr.co/edit/TX6ek4R62AfM2zUXcoC3?p=preview

問題は、奇数個のタブのみで動作しているようです。ここで私が何を意味するかです:

初期ロードでは、それは次のようになります。

enter image description here

私は新しいタブを追加した後、それは正しくアクティブなものを示しています

enter image description here

Iを別のものを追加すると何も選択されず、activeTabIndex変数は未定義になります:

enter image description here

そして、それは再び作業を開始する第三1上:

enter image description here

そうでもアクティブインデックス番号(0、2)のために、それが正常に動作します。しかし、何とかAcitve Index:1の代わりに空白を表示し、アクティブなタブを設定しません。変数をコンソールに書き込むと、すべての値が正しく表示されます。

どのようなヘルプ/ポインター/アイデアも大歓迎です。

ありがとうございました。 docsによると

答えて

14

アクティブ(デフォルト:最初のタブのインデックス) - タブのアクティブインデックス。これを既存のタブインデックスに設定すると、そのタブがアクティブになります。

タブ列がアクティブなものを含んでいる、私はあなたがそこに$タイムアウトを追加すべきだと思うことを確認します

 $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

をありがとうございました。タイムアウトはトリックを行うようだが、なぜそれがそれなしで半分の時間に動作するのか理解できない。その一見奇妙な行動に関するコメント? –

+0

良い質問ですが、なぜ奇妙なタブのために動作するのか混乱してしまいます。 –

+3

私はGitHubでこの質問をしました。プロジェクトのPMは、同様の問題が報告されており、動的タブをサポートしていないと回答しました。タイムアウトの内側にインデックスを設定するのが正式に推奨される解決策です。だから私はそれを答えとして受け入れます。完全性のために、私は応答を得たスレッドです:https://github.com/angular-ui/bootstrap/issues/611 –

関連する問題