Угловые вкладки UI-Bootstap: не установлена активная вкладка
У меня есть этот plunkr, который имеет систему для добавления вкладок динамически.
Когда я добавляю новую вкладку, она становится активной вкладкой. Проблема возникает, когда я добавляю две вкладки, нажимаю на первую вкладку и добавляю новую вкладку. При таком порядке новая вставленная вкладка не считается активной.
Есть идеи, пожалуйста?
Это HTML-код:
<div ng-controller="TabsDemoCtrl">
{{activeTabIndex}}
<uib-tabset active="activeTabIndex">
<uib-tab ng-repeat="tab in tabs" index="tab.id">
<uib-tab-heading>{{ tab.title }} <a ng-click="removeTab(tab.id)" href=''>(del)</a> </uib-tab-heading>
{{tab.content}}
</uib-tab>
</uib-tabset>
<div ng-controller="BtnCtrl">
<div class="btn btn-primary" ng-click="addTab()">Add</div>
</div>
</div>
И контроллер:
angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('TabsDemoCtrl', function ($rootScope, $scope) {
$rootScope.activeTabIndex = 0;
$rootScope.tabs = [];
//Close tab
$scope.removeTab = function(index)
{
var tabsLength = $scope.tabs.length -1;
for (var i=0; i < $scope.tabs.length; i++)
{
if ($scope.tabs[i].id == index)
{
$scope.activeTabIndex = $scope.tabs[tabsLength].id;
$scope.tabs.splice(i, 1);
}
}
};
})
angular.module('ui.bootstrap.demo').controller('BtnCtrl', function ($timeout, $scope, $rootScope) {
//Add new tabs
$scope.addTab = function()
{
var newTab = {
title: 'new tab',
content: 'content here',
id: makeid()
};
$rootScope.tabs.push(newTab);
$timeout(function()
{
$rootScope.activeTabIndex = newTab.id;
});
}
function makeid()
{
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 5; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
});
1 ответ
Вот рабочий плункер: https://plnkr.co/edit/pucttzsZNMvaZJY13IOq?p=preview
Я думаю, что проблема в том, что вы ссылаетесь activeTabIndex
в вашем шаблоне без $root
действуя так:
active="$root.activeTabIndex"
Что это на самом деле равняется, за пределами шаблона $scope.$root.activeTabIndex
который является удобным методом для $rootScope
изнутри шаблона. Даже если $rootScope
выше всех других областей, когда вы обращаетесь к переменной в шаблоне, который находится в изолированной области видимости, он всегда считается свойством $scope
, uib-tab
вероятно, создает изолированную область, которая делает $rootScope
недоступен для директивы.