一、重要部分
1、 注意 <component :is=item.content></component> :表明模板
<el-tab-pane v-for="(item) in editableTabs" :key="item.name" :label="item.title" :name="item.name" > <component :is=item.content></component> </el-tab-pane>
2、content: 'Jbxx' ,其中 jbxx 是 模板
addTab (targetName, route) { let newTabName = ++this.tabIndex + '' this.editableTabs.push({ title: targetName, name: newTabName, content: 'Jbxx' }) this.editableTabsValue = newTabName if (targetName === '基本信息') { this.show = true } else { this.show = false } // this.$router.push({ // path: route // }) }
二、完整代码
<template> <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab"> <el-tab-pane v-for="(item) in editableTabs" :key="item.name" :label="item.title" :name="item.name" > <component :is=item.content></component> </el-tab-pane> </el-tabs> </template> <script> import VueEvent from '../model/VueEvent.js' import Jbxx from './jgxx/Jbxx' export default { data () { return { show: false, editableTabsValue: '2', editableTabs: [{ title: 'Tab 1', name: '1', content: '' }, { title: 'Tab 2', name: '2', content: '' }], tabIndex: 2 } }, methods: { addTab (targetName, route) { let newTabName = ++this.tabIndex + '' this.editableTabs.push({ title: targetName, name: newTabName, content: 'Jbxx' }) this.editableTabsValue = newTabName if (targetName === '基本信息') { this.show = true } else { this.show = false } // this.$router.push({ // path: route // }) }, removeTab (targetName) { let tabs = this.editableTabs let activeName = this.editableTabsValue if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.name === targetName) { let nextTab = tabs[index + 1] || tabs[index - 1] if (nextTab) { activeName = nextTab.name } } }) } this.editableTabsValue = activeName this.editableTabs = tabs.filter(tab => tab.name !== targetName) } }, mounted () { VueEvent.$on('to-main', (name, route) => { this.addTab(name, route) }) }, components: { Jbxx } } </script> <style scoped> </style>
补充知识:在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 } ]
以上这篇vue2.* element tabs tab-pane 动态加载组件操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】