赞
踩
当我们在开发中遇到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/tingshengshiyu/p/14378049.html?ivk_sa=1024320u
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。