如何使用 angularjs 将选项卡标题与其正文分开?

How can I separate tabs headings from their bodies with angularjs?

在 angularjs 项目中,我使用 uib-tabset 指令来显示选项卡。我想显示所有选项卡通用的左侧面板。所以我必须在 uib-tabset 指令之前或之后添加一个 div。

默认情况下,标题部分直接位于选项卡的顶部 body。

在生成的结构中,我想将面板包含在选项卡中(视觉上):

用uib-tabsets,生成的结构是这样的:

<panel>
<tabs-headings>
<tabs-bodies>

对于这种结构,我找到的唯一方法是编辑 css 并使用位置属性 (left/top) 以便将标题移动到侧面板的顶部,但是我觉得这有风险。 另一种方法是在每个选项卡中复制面板代码,但我也觉得这很糟糕。

相反,我想生成这个,这样创建 css :

会更容易
<tabs-heading>
<panel>
<tabs-bodies>

是否有实现该行为的简单方法?

谢谢

编辑:哈哈。刚刚看到我迟到了 10 个月。

我只是 运行 了解你在说什么。如果您使用 ng-repeat 在每个选项卡中动态呈现内容,这将避免多次重新制作侧面板。

  <div class="tabWrapper">
    <uib-tabset>
    <uib-tab index="$index + 1" ng-repeat="tab in tabs" heading="{{tab.title}}" disable="tab.disabled">

      <div class="sidePanel">{{tab.sidepanel}}</div> 
      <div class="tabContent">{{tab.content}}</div>

    </uib-tab>
    </uib-tabset>
  </div>

你也不需要搞乱绝对定位:

.sidePanel {
  float: left;
  width: 20%;
  height: 10em;
  border: 1px solid black;
  border-top: none;
}

,如果您使用angular-ui-router,您可以使用抽象状态来完成静态侧面板。

config.js

  $stateProvider
    .state('root.tabs', {
      abstract: true,
      controller: 'TabsCtrl as vm',
      templateUrl: 'templates/app-layout/tabs.tpl.html'
    })   
    .state('root.tabs.view', {
      url: '/tabsview',
      templateUrl: 'templates/app-layout/sidepanel.tpl.html'
    });

tabs.tpl.html

   <div>
      <uib-tabset>
        <uib-tab index="$index + 1" ng-repeat="tab in tabs" heading="{{tab.title}}" disable="tab.disabled">

        <div class="sidePanelContainer" ui-view></div>

        <div class="tabContent">{{tab.content}}</div>
        </uib-tab>
      </uib-tabset>
    </div>

sidepanel.tpl.html

<div class="sidePanel">
  <input type="text" value="1234">
  <input type="text" value="4321">
</div>

另请参阅:

希望对您有所帮助