1

在 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="">

我可以class="ng-isolate-scope"通过禁用 debugInfo 来删除它,但它对 CSS 没有影响。

更新 2: 另一种解决方案可能是<div class="tabbable-custom">从我的模板 HTML 中删除,并将该类添加到指令放置的<div>空白处<uib-tabset>。这是 UI Bootstrap 的可能性吗?

4

2 回答 2

1

如以下问题所述,通过覆盖 UI Bootstrap 模板来完成我需要的工作:Can you override specific templates in AngularUI Bootstrap?

于 2015-12-09T14:05:29.237 回答
0

我在使用odetocode示例时遇到了同样的问题,该示例使用angular-ui router实现 tabset 。并在其中DOM添加了一个DIVwith"ng-isolate-scope"类。我试图通过删除额外的 created 来覆盖从 ui-bootstrap-tpl.js 实现的这个块,div最后它可以工作。

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

第二种方法可能看起来很无聊。但是您确定标签集模板保持不变并且不会与其他标签集页面发生冲突。

于 2015-12-20T09:08:47.880 回答