当前位置:   article > 正文

vue中使用elementUI使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结_el-tabs切换优化

el-tabs切换优化

当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便

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

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

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

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

  1. <el-tabs v-model="activeName" @tab-click="handleClick" type="border-card">
  2. <el-tab-pane label="待处理" name="first">
  3. <processed/> <!--这里是自定义的子模块,也就是自定义组件-->
  4. </el-tab-pane>
  5. <el-tab-pane label="已处理" name="second">
  6. <un-processed/>
  7. </el-tab-pane>
  8. </el-tabs>

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

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

  1. <el-tabs v-model="activeName" @tab-click="handleClick" type="border-card">
  2. <el-tab-pane label="待处理" name="first" :key="'first'">
  3. <processed v-if="isFirst"/>
  4. </el-tab-pane>
  5. <el-tab-pane label="已处理" name="second" :key="'second'">
  6. <un-processed v-if="isSecond"/>
  7. </el-tab-pane>
  8. </el-tabs>

js代码如下:

  1. <script>
  2. import Breadcrumb from '@/components/Breadcrumb'
  3. import Processed from './processed'
  4. import UnProcessed from './unprocessed'
  5. export default {
  6. components: {
  7. Breadcrumb,
  8. Processed,
  9. UnProcessed
  10. },
  11. data() {
  12. return {
  13. // 默认第一个Tab
  14. activeName: 'first',
  15. isFirst: true,
  16. isSecond: false
  17. }
  18. },
  19. methods: {
  20. handleClick(tab) {
  21. if (tab.name === 'first') {
  22. this.isFirst = true
  23. this.isSecond = false
  24. } else if (tab.name === 'second') {
  25. this.isFirst = false
  26. this.isSecond = true
  27. }
  28. }
  29. }
  30. }
  31. </script>

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

---------------------------------------------------------------------------------------

el-table中动态表头的写法

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

  1. <el-table-column v-for="item in
  2. tableHeader"
  3. :key="item.key"
  4. :prop="item.key"
  5. :label="item.name"
  6. :formatter="item.formatter"
  7. align="center"
  8. show-overflow-tooltip>
  9. </el-table-column>

js里的数据绑定:

  1. tableHeader: [
  2. {
  3. name: '手机号码',
  4. key: 'partnerPhone'
  5. },
  6. {
  7. name: '姓名',
  8. key: 'partnerName'
  9. },
  10. {
  11. name: '职位',
  12. key: 'position',
  13. formatter: this.posFormatter
  14. },
  15. {
  16. name: '团队',
  17. key: 'teamName'
  18. },
  19. {
  20. name: '代理商',
  21. key: 'agentName'
  22. },
  23. {
  24. name: '状态',
  25. key: 'state',
  26. formatter: this.stFormatter
  27. }
  28. ]

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/581754
推荐阅读
相关标签
  

闽ICP备14008679号