Vue里使用Element UI的Tabs時el-tab-pane的隱藏和顯示

1.效果圖

隱藏相關項后

 <el-tabs v-model="selectTab" ref="tabs" type="border-card" tab-position="top" @tab-click="handleTabClick"> 
                    <el-tab-pane name="0" :label="$t('main.view.tabs.tab0')" v-loading="bloading" :disabled="tabsDisabled[0]">
                        <!-- :data="body1_data" :reload="reload" -->
                        <lr-detail ref="cntBody1" :columns="body_ui.body1" :grid-height="360" pagination
                            :debug="debug" @onColumnGetFocus="cntBody1_columnFocus" @onValueCheck="cntBody1_ValueValidate" @onBeforeSelect="cntBody1_BeforeSelect"
                            @onBeforeModify="cntBody1_beforeEdit" @onContextMenuItemClick="handleContextMenuItemClick_cntBody1"
                            @onDeleteRow="cntBody1_DeleteData" @onGetData="getBody1Data" @onSaveRow="cntBody1_SaveData">
                        </lr-detail>
                    </el-tab-pane>
....省略

 在 el-tab-pane里使用v-show/v-if不生效,將el-tab-pane放在template標籤里也不生效

在研究代碼后,發現隱藏只對 el-tab-pane的子標籤(lr-detail)生效了

如圖

變成這個樣子

這對el-tab-pane分明就是element的bug(直接隱藏頁簽選項后,頁簽看不見也就不會顯示頁簽內容了)

只能自己想辦法解決,如下

this.$refs.tabs.$children[0].$refs.tabs[2].style.display = 'none';
this.$refs.tabs.$children[0].$refs.tabs[3].style.display = 'none';
this.$refs.tabs.$children[0].$refs.tabs[4].style.display = 'none';
this.$refs.tabs.$children[0].$refs.tabs[7].style.display = 'none';

 $children[0]是所有的頁簽名稱項, $children[1]~$children[n] 是頁簽的各個子項

 

參考https://www.cnblogs.com/ImaY/p/9015927.html

 

 

Vue-element-ui使用el-tabs组件,有会遇到el-tab-pane未能实现100%自适应高度,导致内部放置的div内容被遮挡的问题。要解决这个问题,可以尝试以下几种方法: 1. 使用CSS Flex布局: 在el-tabs容器上设置display: flex,并在el-tab-pane上设置flex: 1。 ```vue <template> <el-tabs class="full-height-tabs"> <el-tab-pane> <!-- 你的内容 --> </el-tab-pane> <!-- 其他tab-pane --> </el-tabs> </template> <style> .full-height-tabs { display: flex; flex-direction: column; height: 100%; } .full-height-tabs .el-tab-pane { flex: 1; overflow: auto; } </style> ``` 2. 使用v-if控制tab显示: 通过v-if指令来确保只有在激活的tab才渲染内容。 ```vue <el-tabs v-model="activeTab"> <el-tab-pane name="tab1" v-if="activeTab === 'tab1'"> <!-- tab1的内容 --> </el-tab-pane> <el-tab-pane name="tab2" v-if="activeTab === 'tab2'"> <!-- tab2的内容 --> </el-tab-pane> <!-- 其他tab-pane --> </el-tabs> ``` 3. 使用计算属性动态设置高度: 在计算属性中计算容器高度,并将其应用到el-tabs组件上。 ```vue <template> <el-tabs :style="{ height: tabHeight + 'px' }"> <el-tab-pane> <!-- 你的内容 --> </el-tab-pane> <!-- 其他tab-pane --> </el-tabs> </template> <script> export default { data() { return { tabHeight: 0 } }, mounted() { this.updateTabHeight(); window.addEventListener('resize', this.updateTabHeight); }, beforeDestroy() { window.removeEventListener('resize', this.updateTabHeight); }, methods: { updateTabHeight() { this.tabHeight = window.innerHeight - /* 其他元素高度 */; } } } </script> ``` 4. 使用CSS Calc函数: 直接在CSS中使用calc函数计算高度。 ```css .el-tabs { height: calc(100vh - /* 其他元素高度 */); } .el-tabs .el-tab-pane { height: 100%; overflow: auto; } ``` 这些方法中,第一种使用Flex布局的方法通常是最简单最有效的。它可以确保el-tab-pane始终占据el-tabs的剩余空间,同允许内部内容在需要滚动。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值