element tab切换 table 高度和宽度变化

个人记录: tab切换 table 高度和宽度变化
原因:1. table的父级容器不能用flex布局,不然在切换的时候 宽度一直增减
2.tab 的切换是 display 的属性切换
解决办法:
1. 在 el-tab-pane 包含的子组件 用if来限制
2. 在父组件 tab切换的时候 调用 子组件 获取数据的 方法

  // tab 切换
        handleClick() {
            // 直接调用子组件初始化方法 避免 子组件 table 高度塌陷 有个bug 每次切换后 宽度一直增加(原因是父级容器用flex 布局了) ,子组件调用的时候 用 v-if=
            setTimeout(()=>{
                this.$refs[this.activeName].initTableData(this.subprojectId)
            })
        },
	 <el-tabs
          v-model="activeName"
          @tab-click="handleClick"
        >
        <el-tab-pane label="测评信息" name="first">
            <InformationTable
              v-if="activeName === 'first'"
              ref="first"
              :subprojectId="subprojectId"
            ></InformationTable>
        </el-tab-pane>
        <el-tab-pane label="原始数据" name="second">
            <OriginalTable
              v-if="activeName === 'second'"
              ref="second"
              :subprojectId="subprojectId"
            ></OriginalTable>
        </el-tab-pane>
 	 </el-tabs>

还有个解决方法:但是有个bug 在浏览器里 一直打印 doLayout undefined,但是效果功能都能使用。如果有大佬知道这个方法解决这个报错的 请告诉我下 谢谢

// 父组件
		<el-tabs
          v-model="activeName"
          @tab-click="handleClick"
        >
        <el-tab-pane label="测评信息" name="first">
            <InformationTable
              :subprojectId="subprojectId"
              :activeName="activeName"
            ></InformationTable>
        </el-tab-pane>
        <el-tab-pane label="原始数据" name="second">
            <OriginalTable
              :subprojectId="subprojectId"
               :activeName="activeName"
            ></OriginalTable>
        </el-tab-pane>
 	 </el-tabs>
handleClick(){
// 什么都不干
}
// 子组件的 mixins
props:{
 	activeName: {
            type: String,
            default:''
       },
},
watch:{
	 activeName: function (v) {
            switch (v) {
                case 'first':
                    this.$nextTick(() => {
                            this.$refs.informationTable.doLayout()
                    })
                    break;
                case 'second':
                    this.$nextTick(() => {
                        this.$refs.originalTable.doLayout()
                    })
                    break;
                case 'third':
                    this.$nextTick(() => {
                        this.$refs.messageTable.doLayout()
                    })
                    break;
                default:
                    this.$nextTick(() => {
                        this.$refs.videoTable.doLayout()
                    })
                    break;
            }
        } 
        // 监听tab切换 重新刷新渲染表格 不然表格高度会缩小 有个bug 控制台一直报错 doLayout undefined,
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值