在 API 设置上设置选项卡窗格处于活动状态?

Posted

技术标签:

【中文标题】在 API 设置上设置选项卡窗格处于活动状态?【英文标题】:Set tab pane active on API settings? 【发布时间】:2017-10-12 16:49:17 【问题描述】:

我正在尝试根据来自 Angular 函数的 API 的设置设置一个活动选项卡。 api 调用后选项卡被激活,但选项卡窗格未激活。这是我的代码:

html

<ul class="nav nav-tabs" data-toggle="tabs">
                                    <!-- <li ng-show="settings.tabs.timeline" class="active" style="margin-bottom: -2px;"><a href="#timeline" onclick="tabMenu(this.id)" id="timelinetab" data-toggle="tooltip" title="" data-original-title="Timeline"><i class="fa fa-history"></i></a></li> -->
   <li id = "inquiryli" ng-show="settings.tabs.inquiry" style="margin-bottom: -2px;"><a href="#inquiry" onclick="tabMenu(this.id)" id="inquirytab" data-toggle="tooltip" title="" data-original-title="Inquiry"><i class="fa fa-heart"></i></a></li> 
   <li id = "packageli" ng-show="settings.tabs.packages" style="margin-bottom: -2px;"><a href="#package" onclick="tabMenu(this.id)" id="packagetab" data-toggle="tooltip" title="" data-original-title="Packages"><i class="gi gi-snowflake"></i></a></li>
   <li id = "followupli" ng-show="settings.tabs.followups" style="margin-bottom: -2px;"><a href="#followup" onclick="tabMenu(this.id)"  id="followuptab" data-toggle="tooltip" title="" data-original-title="Follow Ups"><i class="fa fa-recycle"></i></a></li>
   <li id = "invoiceli" ng-show="settings.tabs.invoices" style="margin-bottom: -2px;"><a href="#invoice" onclick="tabMenu(this.id)" id="invoicetab" data-toggle="tooltip" title="" data-original-title="Invoices"><i class="gi gi-notes"></i></a></li>
   <li id = "paymentli" ng-show="settings.tabs.payments" style="margin-bottom: -2px;"><a href="#payment" onclick="tabMenu(this.id)" id="paymenttab" data-toggle="tooltip" title="" data-original-title="Payments"><i class="fa fa-money"></i></a></li>
   <li id = "batchli" ng-show="settings.tabs.batches" style="margin-bottom: -2px;"><a href="#batch" onclick="tabMenu(this.id)" id="batchtab" data-toggle="tooltip" title="" data-original-title="Batches"><i class="fa fa-cubes"></i></a></li>
   <li id = "attendanceli" ng-show="settings.tabs.attendance" style="margin-bottom: -2px;"><a href="#attendance" onclick="tabMenu(this.id)" id="attendancetab" data-toggle="tooltip" title="" data-original-title="Attendance"><i class="gi gi-alarm"></i></a></li> 

</ul>

<div class="tab-content">
    <div class="tab-pane" id="package"> ....content ...</div>
    <div class="tab-pane" id="invoice"> ....content ...</div>
    <div class="tab-pane" id="inquiry"> ....content ...</div>
    <div class="tab-pane" id="followup"> ....content ...</div>
    <div class="tab-pane" id="attendance"> ....content ...</div>
</div>

控制器

app.controller('summaryController',function($scope,$http,$timeout,PagerService)

    $scope.settings = ;
    apiCall("session_id":session_id,"user_id":user_id,"summaryRoute.php","selectUserConfig").then(function (response)  
        if(response.data.error == 0)
            $scope.settings = response.data.data;
            if($scope.settings.user_type == 'M')
                $("#packageli").addClass("active");
                $('.nav-tabs a[href="#package"]').tab('show')
            
            else if($scope.settings.user_type == 'I')
                $("#inquiryli").addClass("active");
                 $('.nav-tabs a[href="#inquiry"]').tab('show')
            
            else
                $("#followupli").addClass("active");
                $('.nav-tabs a[href="#followup"]').tab('show')
            
        
        else
           $scope.settings = ; 

      console.log($scope.settings)
    );
);

【问题讨论】:

您似乎找到了使选项卡“活动”的 active 类 - 您是否尝试对窗格执行相同操作? 会怎样? @MarkC。 摆脱 bootstrap.js 并使用 angular-ui-bootstrap。控制器中不应有 jQuery 或其他 dom 代码。控制器应该知道关于视图结构的任何事情 但有一段时间我想要一些解决方案来解决这个问题@charlietfl 请尝试为此创建 plunker。 【参考方案1】:

您的范围内已经有了您需要的值。您需要做的是使用 ng-class,并且有几种方法可以做到这一点。 https://docs.angularjs.org/api/ng/directive/ngClass

使用对象

<li id = "packageli" ng-class=" active: settings.user_type === 'M' "></li>
<li id = "inquiryli" ng-class=" active: settings.user_type === 'I' "></li>
<li id = "followupli" ng-class=" active: !(settings.user_type === 'I' || settings.user_type === 'M') "></li>

使用函数,更好,因为

逻辑从视图中抽象出来并隔离) 它可以与 ng-show 或任何其他指令一起重复使用 可以重复使用来切换其他元素

html

<li id = "packageli" ng-class="active: isPackageActive()"></li>
<li id = "inquiryli" ng-class="active: isInquiryActive()"></li>
<li id = "followupli" ng-class="active: isFollowUpActive()"></li>

js

function isPackageActive() 
    return settings.user_type === 'M';


function isInquiryActive() 
    return settings.user_type === 'I';


function isFollowUpActive() 
    return !(isInquiryActive() || isPackageActive());

PS: 不要在控制器中使用 jquery。如果你需要做一些你不能用 ng-model、ng-class 等角度指令做的事情,请使用自定义指令

【讨论】:

以上是关于在 API 设置上设置选项卡窗格处于活动状态?的主要内容,如果未能解决你的问题,请参考以下文章

UIB 选项卡 - 设置第二个选项卡处于活动状态

在jquery中上传文件后设置当前选项卡处于活动状态

根据访问的路线设置 Material-UI 选项卡处于活动状态

仅在选项卡处于活动状态时加载数据?

在屏幕大小更改时触发 javascript

切换回搜索栏处于活动状态时,选项卡栏视图变为空白