2021-07-22

element-UI-tabs标签页的使用

第一次使用tabs标签页,遇到了一些些坑,在这里记录一下。

基本使用

打算做一个文件管理功能,目前有三个界面,想要利用tabs标签页对这三个界面进行管理。
首先是创建tabs标签页

<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
      <el-tab-pane label="文件信息" name="fileinfo" :key="'fileinfo'">
        <fileinfo></fileinfo>
      </el-tab-pane>
      <el-tab-pane label="文件名详情" name="nxsystemfileinfo" :key="'nxsystemfileinfo'">
        <nxsystemfileinfo></nxsystemfileinfo>
      </el-tab-pane>
      <el-tab-pane label="文件类型" name="typeinfo" :key="'typeinfo'">
        <typeinfo></typeinfo>
      </el-tab-pane>
    </el-tabs>

然后导入三个vue文件

import fileinfo from './fileinfo'
import nxsystemfileinfo from './nxsystemfileinfo'
import typeinfo from './typeinfo'
data () {
    return {
      activeName: 'fileinfo', // 默认第一个选项卡
    }
  },
  components: {
    fileinfo, // 文件信息界面
    nxsystemfileinfo, // 文件名界面
    typeinfo // 文件类型界面
  },

上述代码的效果如下:
在这里插入图片描述
这基本可以完成预期的目标,但是在开发过程中,每个tab表单的数据是动态的,在页面打开时,vue把所有页面的内容都进行了渲染,只是其他的页面隐藏了。这回导致打开页面时需要加载多个数据而卡顿,并且数据不能实时更新。

我们可以利用v-if控制显示隐藏,只允许当前页签进行渲染,对代码改进如下:

 <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
      <el-tab-pane label="文件信息" name="fileinfo" :key="'fileinfo'">
        <fileinfo v-if="activeName=='fileinfo'"></fileinfo>
      </el-tab-pane>
      <el-tab-pane label="文件名详情" name="nxsystemfileinfo" :key="'nxsystemfileinfo'">
        <nxsystemfileinfo v-if="activeName=='nxsystemfileinfo'"></nxsystemfileinfo>
      </el-tab-pane>
      <el-tab-pane label="文件类型" name="typeinfo" :key="'typeinfo'">
        <typeinfo v-if="activeName=='typeinfo'"></typeinfo>
      </el-tab-pane>
    </el-tabs>

然后就出问题了,这里只能显示第一个页签的内容,后面两个页签的table数据并没有查询。在这里插入图片描述
需要在点击tab切换时添加一个查询数据的方法

    <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
      <el-tab-pane label="文件信息" name="fileinfo" :key="'fileinfo'">
        <fileinfo v-if="activeName=='fileinfo'" ref="fileinfo"></fileinfo>
      </el-tab-pane>
      <el-tab-pane label="文件名详情" name="nxsystemfileinfo" :key="'nxsystemfileinfo'">
        <nxsystemfileinfo v-if="activeName=='nxsystemfileinfo'" ref="nxsystemfileinfo"></nxsystemfileinfo>
      </el-tab-pane>
      <el-tab-pane label="文件类型" name="typeinfo" :key="'typeinfo'">
        <typeinfo v-if="activeName=='typeinfo'" ref="typeinfo"></typeinfo>
      </el-tab-pane>
    </el-tabs>
  mounted () {
    this.onQuery()
  },
methods: {
    handleClick (tab, event) {
      this.activeName = tab.name
      var that = this
      setTimeout(function () {
        that.onQuery()
      }, 500)
      console.log(tab, event)
    },
    onQuery () {
      this.$refs[this.activeName].getDataList()
    },
    // 上传文件
    }

getDataList()方法是每个界面都有的查询数据的方法。

最终效果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值