我的this 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;
}
});
答案 0 :(得分:1)
这是一个工作的掠夺者:https://plnkr.co/edit/pucttzsZNMvaZJY13IOq?p=preview
我认为问题是您在模板中引用activeTabIndex
而$root
没有这样做:
active="$root.activeTabIndex"
这实际上也等同于模板之外的$scope.$root.activeTabIndex
,它是模板内部$rootScope
的便捷方法。即使$rootScope
高于所有其他范围,但当您访问隔离范围中的模板中的变量时,它始终被认为是{的属性{1}}。 $scope
可能正在创建隔离范围,这使得uib-tab
无法使用该指令。