我们开发中遇到tab切换,这时候eleltabs感觉很方便

但当我在把代码都写完后,发现一个问题就是页面打开

虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容渲染出来了,只是其他的隐藏了,同时其他tabjs也都走了一边,当你点击tabjs就不会再去请求后台

这种机制会造成一个问题,就是如果每个tab页的数据都过大的时候,可能就会导致首次打开页面卡顿现象,同时如果数据库数据实时发生变化的话,比如你一分钟打开的这个页面,看的是tab1的内容,看了1分钟后我想看tab2的内容,但此时tab2的内容后台数据库已经发生变化了,你能看到的只是1分钟前的数据,那该怎么解决这个问题呢?

首先一开始一次加载所有tab的代码是这样的↓

<el-tabs v-model="activeName" @tab-click="handleClick" type="border-card">
      <el-tab-pane label="待处理" name="first">
        <processed/&gt;  <!--这里自定义的子模块,也就是自定义组件--&gt;
      </el-tab-pane&gt;
      <el-tab-pane label="已处理" name="second"&gt;
        <un-processed/&gt;
      </el-tab-pane&gt;
</el-tabs&gt;

这时候vif的作用可以发挥出来了,当v-if的值为falsevue是不会去渲染标签下的内容

我们就把tabs下的子模块标签上加v-if,一开始只设置其中一个true其他都为false,当点击tab切换时去改变v-if的值,代码如下

<el-tabs v-model="activeName" @tab-click="handleClick" type="border-card"&gt;
      <el-tab-pane label="待处理" name="first" :key="'first'">
        <processed v-if="isFirst"/>
      </el-tab-pane>
      <el-tab-pane label="已处理" name="second" :key="'second'">
        <un-processed v-if="isSecond"/>
      </el-tab-pane>
    </el-tabs>

js代码如下

<script>
import Breadcrumb from '@/components/Breadcrumb'
import Processed from './processed'
import UnProcessed from './unprocessed'
export default {
  components: {
    Breadcrumb,
    Processed,
    UnProcessed
  },
  data() {
    return {
      // 默认第一个Tab
      activeName: 'first',
      isFirst: true,
      isSecond: false
    }
  },
  methods: {
    handleClick(tab) {
      if (tab.name === 'first') {
        this.isFirst = true
        this.isSecond = false
      } else if (tab.name === 'second') {
        this.isFirst = false
        this.isSecond = true
      }
    }
  }
}
</script>

这样就可以完美解决上面的问题,首次加载页面只会渲染其中一个tab的内容,同时点击tab切换页面重新渲染页面good

—————————————————————————————

el-table动态表头写法

其实就是一个v-for循环,根据后台返回数据生成对应表头

<el-table-column v-for="item in 
            tableHeader"
              :key="item.key"
              :prop="item.key"
              :label="item.name"
              :formatter="item.formatter"
              align="center"
              show-overflow-tooltip>
</el-table-column>

js里的数据绑定

tableHeader: [
        {
          name: '手机号码',
          key: 'partnerPhone'
        },
        {
          name: '姓名',
          key: 'partnerName'
        },
        {
          name: '职位',
          key: 'position',
          formatter: this.posFormatter
        },
        {
          name: '团队',
          key: 'teamName'
        },
        {
          name: '代理商',
          key: 'agentName'
        },
        {
          name: '状态',
          key: 'state',
          formatter: this.stFormatter
        }
      ]

记录 转载此:https://www.cnblogs.com/tingshengshiyu/p/14378049.html?ivk_sa=1024320u

原文地址:https://blog.csdn.net/weixin_42415158/article/details/129723996

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_26552.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注