使用UI Bootstrap中包含的<uib-tabset>
时,指令模板会围绕生成的无序列表,其中包含空<div>
元素。
<div>
<ul class="nav nav-{{type || 'tabs'}}" ng-class="{'nav-stacked': vertical, 'nav-justified': justified}" ng-transclude></ul>
<div class="tab-content">
<div class="tab-pane"
ng-repeat="tab in tabs"
ng-class="{active: tab.active}"
uib-tab-content-transclude="tab">
</div>
</div>
</div>
由于CSS选择器如下所示,这导致我的CSS崩溃。
.tabbable-custom > .nav-tabs > li.active {
...
}
当我使用<uib-tabset>
时,此规则未被提取,因为现在的层次结构
.tabbable-custom > div > .nav-tabs > li.active {
...
}
我是否可以避免覆盖整个CSS库以解释添加的<div>
?
更新
以下是我的模板中的html:
<div class="portlet-body">
<div class="tabbable-custom">
<uib-tabset>
<uib-tab ng-repeat="tabData in tabDataArray" heading="{{ tabData.heading }}">
这是生成的DOM:
<div class="portlet-body">
<div class="tabbable-custom">
<div class="ng-isolate-scope">
<ul class="nav nav-tabs" ng-class="{'nav-stacked': vertical, 'nav-justified': justified}" ng-transclude="">
我可以通过禁用debugInfo删除class="ng-isolate-scope"
,但它并没有对CSS产生影响。
更新2:
另一种解决方案可能是从我的模板HTML中删除<div class="tabbable-custom">
,并将该类添加到<div>
指令所在的空<uib-tabset>
。这是UI Bootstrap的可能性吗?
答案 0 :(得分:1)
通过覆盖UI Bootstrap模板来管理以完成我需要的内容,如此问题中所述:Can you override specific templates in AngularUI Bootstrap?
答案 1 :(得分:0)
当我使用odetocode示例时,我遇到了同样的问题,它使用angular-ui router实现了tabset。并且在DOM
中准确地添加了DIV
和"ng-isolate-scope"
类。我试图通过删除其他创建的div
来覆盖从ui-bootstrap-tpl.js获得的这个块,最后它可以工作。
angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("template/tabs/tabset.html",
"<div>\n" +
" <ul class=\"nav nav-{{type || 'tabs'}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
" <div class=\"tab-content\">\n" +
" <div class=\"tab-pane\" \n" +
" ng-repeat=\"tab in tabs\" \n" +
" ng-class=\"{active: tab.active}\"\n" +
" uib-tab-content-transclude=\"tab\">\n" +
" </div>\n" +
" </div>\n" +
"</div>\n" +
"");
}]);
还有另一种方法。您还可以通过将相关样式更改为以下格式来覆盖CSS
样式:
.tabbable-custom > .ng-isolate-scope > .nav-tabs
第二种方法可能看起来很无聊。但您确定tabset模板保持不变,并且不会与其他tabset页面发生冲突。