vue中使⽤elementUI使⽤el-tabs,切换Tab如何实现实时加载,
以及el-t。。。
当我们在开发中遇到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">
pane<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
}
]