【问题标题】:Angular UI Tab - separate tab-content and tab-headerAngular UI 选项卡 - 单独的选项卡内容和选项卡标题
【发布时间】:2017-10-13 19:59:22
【问题描述】:

我在尝试使用 uib-tabset 插件时遇到了一个问题,好的,该插件工作正常,但我需要在特定的事情上使用它。 问题:如何将选项卡标题与选项卡内容分开。

angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('TabsDemoCtrl', function ($scope, $window) { $scope.setActiveTab = function(index){
    $scope.activeTab = index;
  }
});
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-animate.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-sanitize.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.1.3.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<div ng-app="ui.bootstrap.demo">
  <div ng-controller="TabsDemoCtrl">
    <div class="some-tabs-header-holder">
      <uib-tabset active="active" vertical="false" >
        <uib-tab index="0" heading="Tab 1"><!-- not needed tab 1 content--></uib-tab>
        <uib-tab index="1" heading="Tab 2"><!-- not needed tab 2 content--></uib-tab>
      </uib-tabset>
    <div>
    <div class="the-tabs-content-holder">
      <div id="tab1" class="tab1-content">tab 1 content</div>
      <div id="tab2" class="tab2-content">tab 2 content</div>
    </div>
  </div>
</div>

我只需要在选择选项卡时显示“the-tabs-content-holder”div 中的内容

【问题讨论】:

    标签: javascript html angularjs tabs angular-ui-bootstrap


    【解决方案1】:

    您可以通过为每个选项卡附加select 事件处理程序并使用ng-if 指令来根据$scope.activeTab 的值显示tab 内容

    angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
    angular.module('ui.bootstrap.demo').controller('TabsDemoCtrl', function ($scope, $window) { 
      $scope.activeTab=1;
      $scope.setActiveTab = function(index){
        $scope.activeTab = index;
      }
    });
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-animate.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-sanitize.js"></script>
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.1.3.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <div ng-app="ui.bootstrap.demo">
      <div ng-controller="TabsDemoCtrl">
        <div class="some-tabs-header-holder">
          <uib-tabset active="active" vertical="false" >
            <uib-tab select="setActiveTab(1)" index="0" heading="Tab 1"><!-- not needed tab 1 content--></uib-tab>
            <uib-tab select="setActiveTab(2)" index="1" heading="Tab 2"><!-- not needed tab 2 content--></uib-tab>
          </uib-tabset>
        <div>
        <div class="the-tabs-content-holder">
          <div id="tab1" ng-if="activeTab==1" class="tab1-content">tab 1 content</div>
          <div id="tab2" ng-if="activeTab==2" class="tab2-content">tab 2 content</div>
        </div>
      </div>
    </div>

    【讨论】:

    • 好吧,你利用了select 属性,它是uib-tab 的原生属性。所以 +1 :)
    • 这与上面的答案相同,但使用 select 属性,请在那里阅读我的评论!
    【解决方案2】:
    • 使用ng-click="setActiveTab(0)"设置所选标签的index
    • 使用ng-if根据$scope.activeTab的值显示标签内容div

    angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
    angular.module('ui.bootstrap.demo').controller('TabsDemoCtrl', function($scope, $window) {
      $scope.activeTab = 0;
      $scope.setActiveTab = function(index) {
        $scope.activeTab = index;
      }
    });
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-animate.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-sanitize.js"></script>
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.1.3.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <div ng-app="ui.bootstrap.demo">
      <div ng-controller="TabsDemoCtrl">
        <div class="some-tabs-header-holder">
          <uib-tabset active="active" vertical="false">
            <uib-tab index="0" heading="Tab 1" ng-click="setActiveTab(0)">
              <!-- not needed tab 1 content-->
            </uib-tab>
            <uib-tab index="1" heading="Tab 2" ng-click="setActiveTab(1)">
              <!-- not needed tab 2 content-->
            </uib-tab>
          </uib-tabset>
          <div>
            <div class="the-tabs-content-holder">
              <div id="tab1" class="tab1-content" ng-if="activeTab == 0">tab 1 content</div>
              <div id="tab2" class="tab2-content" ng-if="activeTab == 1">tab 2 content</div>
            </div>
          </div>
        </div>

    【讨论】:

    • 我们的想法是一样的 :) +1 为您的回答。
    • 是的,我们可以这样做,但我对插件功能感兴趣。当您添加 data-toggle="tab" 和 data-target="#id_of_element" 时,意味着就像在引导选项卡中一样
    • 我认为这不可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2015-08-12
    • 1970-01-01
    相关资源
    最近更新 更多