You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 4中三个Div切换功能失效的解决方案求助

解决Angular 4中三张财务报表的标签切换问题

我来帮你搞定这个标签切换的问题~你现在的核心问题是只用了一个布尔变量showTable来控制三个不同表格的显示,这显然没法区分三个独立的标签状态——当前逻辑会导致前两个表格同时显示/隐藏,而第三个表格因为没加*ngIf会一直显示,完全达不到预期的切换效果。

我给你调整成用字符串变量存储当前激活标签的方案,这样就能精准控制每个标签的显示和激活状态了:

第一步:修改组件逻辑

在你的组件类里,把原来的showTable替换成一个存储当前激活标签的变量,默认设为利润表:

export class YourComponent {
  // 默认激活利润表
  activeTab: string = 'income';
}

第二步:更新模板代码

把导航栏和表格区域的代码改成下面这样,每个链接点击时设置对应的activeTab值,表格区域根据activeTab判断是否显示:

<div class="card-body">
  <ul class="nav nav-pills financial-tab" id="financial-tab" role="tablist">
    <li class="nav-item">
      <a 
        class="nav-link" 
        [ngClass]="{'active': activeTab === 'income'}" 
        id="sincome-tab" 
        data-toggle="pill" 
        href="javascript:void(0);" 
        role="tab" 
        aria-controls="table" 
        aria-selected="{{activeTab === 'income'}}"
        (click)="activeTab = 'income'"
      >
        Income Statement
      </a>
    </li>
    <li class="nav-item">
      <a 
        class="nav-link" 
        [ngClass]="{'active': activeTab === 'cash'}" 
        id="cash-tab" 
        data-toggle="pill" 
        href="javascript:void(0);" 
        role="tab" 
        aria-controls="chart" 
        aria-selected="{{activeTab === 'cash'}}"
        (click)="activeTab = 'cash'"
      >
        Cash Flow Statement
      </a>
    </li>
    <li class="nav-item">
      <a 
        class="nav-link" 
        [ngClass]="{'active': activeTab === 'balance'}" 
        id="balance-tab" 
        data-toggle="pill" 
        href="javascript:void(0);" 
        role="tab" 
        aria-controls="chart" 
        aria-selected="{{activeTab === 'balance'}}"
        (click)="activeTab = 'balance'"
      >
        Balance Sheet
      </a>
    </li>
  </ul>
  <div class="tab-content Financial-content" id="pills-tabContent">
    <!-- Income table -->
    <div 
      *ngIf="activeTab === 'income'" 
      class="tab-pane fade"
      [ngClass]="{'active show': activeTab === 'income'}"
      id="base-strategy--fs-statement" 
      role="tabpanel" 
      aria-labelledby="table-tab" 
      aria-expanded="{{activeTab === 'income'}}"
    >
      <table class="table">
        <thead>
          <tr>
            <th></th>
            <th>2017</th>
            <th>2018</th>
            <th>2019</th>
            <th>2020</th>
            <th>2021</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Direct premiums written</td>
            <td>33,150,000</td>
            <td>33,813,000</td>
            <td>35,179,045 </td>
            <td>35,882,626 </td>
            <td>35,882,626 </td>
          </tr>
          <tr>
            <td>Assumed premiums written</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
          </tr>
        </tbody>
      </table>
    </div>
    <!-- Cash Flow table -->
    <div 
      *ngIf="activeTab === 'cash'" 
      class="tab-pane fade"
      [ngClass]="{'active show': activeTab === 'cash'}"
      id="base-strategy--fs-cashflow" 
      role="tabpanel" 
      aria-labelledby="table-tab" 
      aria-expanded="{{activeTab === 'cash'}}"
    >
      <table class="table">
        <thead>
          <tr>
            <th></th>
            <th>2017</th>
            <th>2018</th>
            <th>2019</th>
            <th>2020</th>
            <th>2021</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <th colspan="6">Cash flows provided (used) by operating</th>
          </tr>
          <tr>
            <td>Premiums Collected -net of ceded premium</td>
            <td>33,150,000</td>
            <td>33,813,000</td>
            <td>35,179,045 </td>
            <td>35,882,626 </td>
            <td>35,882,626 </td>
          </tr>
          <tr>
            <td>Loss and LAE Paid</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
          </tr>
        </tbody>
      </table>
    </div>
    <!-- Balance Sheet table -->
    <div 
      *ngIf="activeTab === 'balance'" 
      class="tab-pane fade"
      [ngClass]="{'active show': activeTab === 'balance'}"
      id="base-strategy--fs-balancesheet" 
      role="tabpanel" 
      aria-labelledby="table-tab" 
      aria-expanded="{{activeTab === 'balance'}}"
    >
      <table class="table">
        <thead>
          <tr>
            <th>As of the end of the period</th>
            <th>2017</th>
            <th>2018</th>
            <th>2019</th>
            <th>2020</th>
            <th>2021</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <th colspan="6">Assets</th>
          </tr>
          <tr>
            <td>Cash, Cash Equivalents </td>
            <td>18,387,125</td>
            <td>33,813,000</td>
            <td>35,179,045 </td>
            <td>35,882,626 </td>
            <td>35,882,626 </td>
          </tr>
          <tr>
            <td>Short Term Investments</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</div>

关键调整点说明

  • 用activeTab字符串变量代替布尔值,精准区分三个标签状态
  • 每个导航链接的active类由activeTab的值判断,点击时更新activeTab
  • 每个表格区域通过*ngIf控制显示,同时用[ngClass]添加active show类来匹配Bootstrap的tab样式
  • 修复了原代码中第三个表格没有显示控制的问题

这样修改后,点击不同的导航标签就能准确切换对应的财务报表了~

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:06:14