在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结

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

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

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

这种机制会造成一个问题,就是如果每个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/>  <!--这里是自定义的子模块,也就是自定义组件-->
      </el-tab-pane>
      <el-tab-pane label="已处理" name="second">
        <un-processed/>
      </el-tab-pane>
</el-tabs>

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

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

<el-tabs v-model="activeName" @tab-click="handleClick" type="border-card">
      <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/bobo1/p/11023014.html

时间: 2024-10-13 09:26:38

在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结的相关文章

UIWebView中加载HTML的Table,td设置百分比宽度并且宽度不被里面的内容撑开

正常情况下,iOS使用WebView加载HTML的Table时,为了让Table适应屏幕宽度,会使用百分比设置td的宽度,但是由于td中的内容过多,td会被撑开,导致整个Table的宽度会变宽,超出屏幕的宽度. 普通情况下可以设置scalesPageToFit=YES并且td的宽度按百分比设置下就行.实例如下: 1.创建WebView {//创建WebView CGFloat webX = 0; CGFloat webY = offset_y; CGFloat webW = kAllWidth;

Vue中使用Element-UI实现表格跨页多选

跨页多选翻页保存问题折磨了我一天,终于找到了合适的解决方法分享一下. 需求: 项目中使用Element-UI: 表格中数据通过网络请求得到: 给后台接口发送页码(pagenum)和每一页条数(pagesize)实现数据分页: 实现单页内全选 翻页保存之前选中的数据 解决方式: 使用官方文档中提供的row-key属性和reserve-selection属性搭配使用 在表格中设置row-key属性,并将该属性设置为当前渲染数据的json中的唯一标识(比如id之类,我的例子里字段名叫bridgecod

vue的爬坑之路(六)之----基于vue-cli 无限滚动插件无限加载

注:vue-infinite-loading2.0只能在Vue.js2.0中使用.如果你想在Vue.js1.0中使用,请安装vue-infinite-loading1.3版本 npm install vue-infinite-loading --save es6模块导入方式 import InfiniteLoading from 'vue-infinite-loading'; export default { components: { InfiniteLoading, }, }; Templa

在vue中使用Element-UI

Element-UI是一套基于Vue2.0的UI组件库,http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element-ui --save 然后在main.js中引入: import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-default/index.css' import App from './

Vue中使用Element-UI表单验证相关问题及解决

目录 rules验证和自带验证 项目中表单填写提交前需要进行验证,记录一下踩坑的几个地方 rules验证和自带验证 在data中用rules自定义了验证信息,注意,prop的值应该与v-model的值和rules中的值一样,否则无法触发rules验证. 例子如下: <el-form-item label="分布区间" prop="scale"> <el-input v-model="form.scale" placeholder

WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题

今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException: Could not load file or assembly 'System.Xml.XPath, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Th

关于 vue中 export default 和 new Vue({})

对于刚开始学习vue的人(像我),一般都不会清楚的知道两者之间该怎么区分,甚至觉得两者是一样的. 那么,经过我的查证,发现两者之间是没有任何联系的. export default ES6 Module语法中的命令,是为了方便 使用import命令时 必须要知道所加载的变量名或函数名,否则无法加载的问题. 地址:http://es6.ruanyifeng.com/#docs/module#export-default-%E5%91%BD%E4%BB%A4 export default命令并不是在每

vue页面首次加载缓慢原因及解决方案

第一次打包vue的项目部署到服务器下时,发现初次加载特别的缓慢,将近20s页面才加载出来,完全没有开发环境上的那么流畅.主要原因是页面在打包后如果不进行相关配置会导致资源文件特别的大,一次想要全部加载完成会特别的耗时.这里简单总结一下自己用到的一些优化的方案. 首先我们可以安装webpack-bundle-analyzer  插件,通过这个插件我们可以在打包的时候看到打包文件的大小,可以明显的看出哪些文件比较大. 解决方案一 1,去掉编译文件中map文件.在编译好后,我们会看到文件夹下有特别多的

vue 组件按需引用,vue-router懒加载,vue打包优化,加载动画

当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 结合 Vue 的 异步组件 和 Webpack 的 code splitting feature, 轻松实现路由组件的懒加载. 我们要做的就是把路由对应的组件定义成异步组件 const Foo = resolve => { // require.ensure 是 Webpack 的特殊语法,用来设置 code-split