【问题标题】:tab data to be displayed in individual tabs要在各个选项卡中显示的选项卡数据
【发布时间】:2017-10-31 16:02:51
【问题描述】:

我正在研究角度引导选项卡。当用户浏览选项卡时,我想在每个选项卡中显示不同的内容。 我无法在单个选项卡中显示内容。请找demohere

js代码:

var myApp = angular.module('tabs', [ 'ui.bootstrap']);
myApp.controller('tabsctrl', function ($rootScope,$scope) {
          $rootScope.tabName ='MyTab Name';

    $rootScope.tabValue="tab1Value";
    $scope.applicationData = {};
    $scope.activeModule = "tab1Value";
    $scope.programModules=[{"tabName":"Tab1","tabValue":"tab1Value"},{"tabName":"Tab2","tabValue":"tab2Value"}];
    $scope.loadApplicationData = function(tabVal,tabName){
        $rootScope.tabName =tabName;
     alert("$rootScope.tabName :: "+$rootScope.tabName);
        $rootScope.tabValue=tabVal;
        $scope.activeModule = tabVal;

    }; 
    $scope.loadApplicationData($scope.activeModule,'Tab1');


});

html代码:

<div ng-controller="tabsctrl">
 <div class="top-tabs">
        <!-- Nav tabs -->
        <ul class="nav nav-tabs" role="tablist" >
            <li role="presentation" class="{{ pg.tabValue == activeModule? 'active':''}}" ng-repeat="pg in programModules">
                <a href="javascript:void(0)"  ng-click="loadApplicationData(pg.tabValue,pg.tabName)" >{{pg.tabName}}</a>
            </li>
        </ul>

         <div class="tab-content">
          <!--Tab1 data div-->
            <div role="tabpanel" class="tab-pane active" id="tab1">
                <div class="row">
                    <div class="col-sm-12">
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                 Tab1 data
                            </div>This should be shown when user click tab1
                            </div>
                            </div><div></div>
              <!--Tab2 data div-->
              <div role="tabpanel" class="tab-pane active" id="tab2">
                <div class="row">
                    <div class="col-sm-12">
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                 Tab2 data
                            </div>This should be shown when user click tab2
                            </div>
                            </div><div></div>  </div>
                            </div></div>

当用户点击tab1时,应该显示tab1 div,同样当用户点击Tab2时,应该显示tab2数据并且应该选择Tab2。任何建议都会有所帮助。

【问题讨论】:

  • @charlietfl - 目前这是我的示例链接 plnkr.co/edit/PoAKHeZuBly5TWYWMOxF?p=info 。我可以使用相同的 js 代码来实现我的应用程序中的功能吗?我已经有了这个代码。谢谢
  • 阅读 angular-ui-bootstrap 选项卡文档。您没有使用他们的指令,但您将模块包含在页面中
  • 正如 charlietfl 所提到的,使用 Angular UI Bootstrap。这是您要查找的信息angular-ui-bootstrap 这是example
  • @pedro - 谢谢,我理解,但作为一个面临困难的新手。正如我在帖子中提到的,我将在选项卡中显示多个
    ,并且每个选项卡都有要显示的唯一数据。对于您提到的示例,我不能直接在我的页面中使用
    。请指教。
  • @pedro - 感谢您提供示例链接。我认为这应该可行,但如何在选项卡中显示相应的
    。请参阅plnkr.co/edit/fv8oevUUOeVEDXmv1LcF?p=preview。当用户点击 tab1 时,应该显示 tab1 div,当用户点击 tab2 时,应该显示 tab2 div,请建议需要进行哪些更改。

标签: javascript angularjs twitter-bootstrap tabs


【解决方案1】:

这是你如何实现的,我已经更新了你的 html,因为缺少很多结束 div 标记,我只是根据你的代码样式添加条件

<div ng-app="tabs">

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.3.js"></script>
<script src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">

<div ng-controller="tabsctrl">
    <div class="top-tabs">
        <!-- Nav tabs -->
        <ul class="nav nav-tabs" role="tablist">
            <li role="presentation" class="{{ pg.tabValue == activeModule? 'active':''}}" ng-repeat="pg in programModules">
                <a href="javascript:void(0)" ng-click="loadApplicationData(pg.tabValue,pg.tabName)">{{pg.tabName}}</a>
            </li>
        </ul>

        <div class="tab-content">
            <div ng-if="tabName === 'Tab1'" role="tabpanel" class="tab-pane active" id="tab1">
                <div class="row">
                    <div class="col-sm-12">
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                Tab1 data
                            </div>This should be shown when user click tab1
                        </div>
                    </div>
                </div>
            </div>

            <div ng-if="tabName === 'Tab2'" role="tabpanel" class="tab-pane active" id="tab2">
                <div class="row">
                    <div class="col-sm-12">
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                Tab2 data
                            </div>This should be shown when user click tab2
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

【讨论】:

  • 但是我猜在 html 中使用 ng-if 并使用 tabName 检查并不是实时应用程序中的正确方法。将来如果需要更改 tabName,我必须修改 js 以及 html 代码,这是不可取的。请建议。我们能不能做得更好。谢谢
  • 这个 plunker plnkr.co/edit/BsfDWSFILiJeJ04Nzlvy?p=preview 是实现目标的正确方法。
【解决方案2】:

使用ng-include 可以快速完成您的要求。见plunker example

var myApp = angular.module('tabs', [ 'ui.bootstrap']);
myApp.controller('tabsctrl', function ($rootScope,$scope) {

    $scope.tabs = [
      {"tabName":"Tab1","tabValue":"tab1Value","templateURL":"tab1.html"},
      {"tabName":"Tab2","tabValue":"tab2Value","templateURL":"tab2.html"}
    ];

});

<div ng-app="tabs">

    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.3.js"></script>
    <script src="example.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">

  <div ng-controller="tabsctrl">
    <uib-tabset>
      <uib-tab ng-repeat="tab in tabs" heading="{{tab.tabName}}" active="tab.active" disable="tab.disabled">
        <div ng-include="tab.templateURL"></div>
      </uib-tab>
    </uib-tabset>
  </div>
</div>

【讨论】:

    【解决方案3】:

    您似乎正在尝试显示一些选项卡按钮以根据所选选项卡切换内容。我不确定您是否尝试仅显示所选选项卡的内容或所有选项卡的某些内容以及所选选项卡的额外内容,因此我提供了两者的示例。

    Plunker example

    function controller($scope){
        $scope.tabs = [
            {name: 'Tab 1', value1: 'Tab 1 value 1', value2: 'Tab 1 value 2'},
            {name: 'Tab 2', value1: 'Tab 2 value 1', value2: 'Tab 2 value 2'},
        ];
        $scope.selectedTab = $scope.tabs[0];
    
        $scope.selectTab = function(tab){
            $scope.selectedTab = tab;
        };
    }
    

    HTML示例1

    <div ng-repeat="tab in tabs"
         ng-click="selectTab(tab)"
         ng-class="{'selected': tab == selectedTab}">
        {{tab.name}}
    </div>
    <div class="tab-content">
        {{selectedTab.value1}}
    </div>
    

    HTML 示例 2

    <div ng-repeat="tab in tabs"
         ng-click="selectTab(tab)"
         ng-class="{'selected': tab == selectedTab}">
        {{tab.name}}
    </div>
    <div ng-repeat="tab in tabs">
      {{tab.value1}}
      <div ng-if="tab === selectedTab">
        {{tab.value2}}
      </div>
    </div>
    

    显然,您可以随心所欲地设计和构建它。 你不应该需要任何特别的东西来实现你想要的。

    我建议你不要使用 $rootScope,我不确定你在这里用它实现了什么。 我还建议您尽可能使用指令或组件,而不是将“ng-controller”附加到 html 的任意位。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签