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

Ant Design Vue标签切换异常:切换后Transferred标签消失

问题解决:Ant Design Vue标签切换后标签消失

问题原因

你给两个<a-tab-pane>都加了v-if判断,这会导致不满足条件的tab-pane被完全销毁。而Ant Design Vue的标签栏是由各个tab-pane的slot="tab"内容生成的,销毁tab-pane自然就会把对应的标签也删掉,所以切换后另一个标签就不见了。

解决方案

方案1:用v-show替换v-if

v-show只是控制元素的显示/隐藏,不会销毁组件,这样两个tab-pane始终存在,标签栏的两个标签也会一直保留:

<a-tabs :current="current" @change="onChange">
    <a-tab-pane key="1" v-show="current === 0">
        <span slot="tab">
            <a-icon type="folder-open" theme="twoTone" /> Pending ({{ pendingCount }})
        </span>
        <pending-list @go-to-transferred="nextTab" @dataCount="updatePendingCount" />
    </a-tab-pane>

    <a-tab-pane key="2" v-show="current === 1">
        <span slot="tab"><a-icon type="folder" theme="twoTone" />Transferred </span>
        <done-list @transferCount="updateTransferCount" />
    </a-tab-pane>
</a-tabs>

方案2:把条件判断移到内部内容组件上

让两个tab-pane始终渲染,只控制内部的列表组件显示隐藏,这样标签栏也会一直完整:

<a-tabs :current="current" @change="onChange">
    <a-tab-pane key="1">
        <span slot="tab">
            <a-icon type="folder-open" theme="twoTone" /> Pending ({{ pendingCount }})
        </span>
        <pending-list v-if="current === 0" @go-to-transferred="nextTab" @dataCount="updatePendingCount" />
    </a-tab-pane>

    <a-tab-pane key="2">
        <span slot="tab"><a-icon type="folder" theme="twoTone" />Transferred </span>
        <done-list v-if="current === 1" @transferCount="updateTransferCount" />
    </a-tab-pane>
</a-tabs>

补充说明

两种方案都能解决问题,区别在于:

  • v-show会渲染所有内容,只是隐藏不显示的部分,适合内容不复杂的场景;
  • 移到内部组件的v-if会销毁不显示的列表组件,适合需要节省性能的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:03:27