vue2.* element tabs tab-pane 動(dòng)態(tài)加載組件操作
一、重要部分
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>
補(bǔ)充知識(shí):在vue中使用elementUI餓了么框架使用el-tabs,切換Tab如何實(shí)現(xiàn)實(shí)時(shí)加載,以及el-table表格使用總結(jié)...
當(dāng)我們?cè)陂_(kāi)發(fā)中遇到tab切換,這時(shí)候用el的el-tabs感覺(jué)很方便
但當(dāng)我在把代碼都寫(xiě)完后,發(fā)現(xiàn)一個(gè)問(wèn)題就是頁(yè)面打開(kāi)時(shí)
雖然我們只能看見(jiàn)當(dāng)前一個(gè)tab頁(yè),但是vue會(huì)幫你把你寫(xiě)的所有tab頁(yè)的內(nèi)容都渲染出來(lái)了,只是其他的隱藏了,同時(shí)其他tab的js也都走了一邊,當(dāng)你點(diǎn)擊tab時(shí)js就不會(huì)再去請(qǐng)求后臺(tái)
這種機(jī)制會(huì)造成一個(gè)問(wèn)題,就是如果每個(gè)tab頁(yè)的數(shù)據(jù)都過(guò)大的時(shí)候,可能就會(huì)導(dǎo)致首次打開(kāi)頁(yè)面卡頓現(xiàn)象,同時(shí)如果數(shù)據(jù)庫(kù)數(shù)據(jù)在實(shí)時(shí)發(fā)生變化的話(huà),比如你一分鐘前打開(kāi)的這個(gè)頁(yè)面,看的是tab1的內(nèi)容,看了1分鐘后我想看tab2的內(nèi)容,但此時(shí)tab2的內(nèi)容后臺(tái)數(shù)據(jù)庫(kù)已經(jīng)發(fā)生變化了,你能看到的只是1分鐘前的數(shù)據(jù),那該怎么解決這個(gè)問(wèn)題呢?
首先一開(kāi)始一次加載所有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>
這時(shí)候v-if的作用就可以發(fā)揮出來(lái)了,當(dāng)v-if的值為false時(shí)vue是不會(huì)去渲染該標(biāo)簽下的內(nèi)容的
那我們就把tabs下的子模塊標(biāo)簽上加v-if,一開(kāi)始只設(shè)置其中一個(gè)為true其他都為false,當(dāng)點(diǎn)擊tab切換時(shí)去改變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 {
// 默認(rèn)第一個(gè)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>
這樣就可以完美解決上面的問(wèn)題,首次加載頁(yè)面只會(huì)渲染其中一個(gè)tab的內(nèi)容,同時(shí)點(diǎn)擊tab切換時(shí)頁(yè)面重新渲染頁(yè)面,good!
el-table中動(dòng)態(tài)表頭的寫(xiě)法
其實(shí)就是一個(gè)v-for循環(huán),根據(jù)后臺(tái)返回?cái)?shù)據(jù)生成對(duì)應(yīng)表頭
<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里的數(shù)據(jù)綁定:
tableHeader: [
{
name: '手機(jī)號(hào)碼',
key: 'partnerPhone'
},
{
name: '姓名',
key: 'partnerName'
},
{
name: '職位',
key: 'position',
formatter: this.posFormatter
},
{
name: '團(tuán)隊(duì)',
key: 'teamName'
},
{
name: '代理商',
key: 'agentName'
},
{
name: '狀態(tài)',
key: 'state',
formatter: this.stFormatter
}
]
以上這篇vue2.* element tabs tab-pane 動(dòng)態(tài)加載組件操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue3動(dòng)態(tài)加載組件以及動(dòng)態(tài)引入組件詳解
- Vue3的setup在el-tab中動(dòng)態(tài)加載組件的方法
- vue如何動(dòng)態(tài)加載組件詳解
- vue組件(全局,局部,動(dòng)態(tài)加載組件)
- Vue加載組件、動(dòng)態(tài)加載組件的幾種方式
- vue3+vite項(xiàng)目中按需引入vant報(bào)錯(cuò):Failed?to?resolve?import的解決方案
- vue3+vite引入插件unplugin-auto-import的方法
- Vue?import?from省略后綴/加載文件夾的方法/實(shí)例詳解
- 在Vue中使用動(dòng)態(tài)import()語(yǔ)法動(dòng)態(tài)加載組件
相關(guān)文章
vue + el-tree 實(shí)現(xiàn)插入節(jié)點(diǎn)自定義名稱(chēng)數(shù)據(jù)的代碼
這篇文章主要介紹了vue + el-tree 實(shí)現(xiàn)插入節(jié)點(diǎn)自定義名稱(chēng)數(shù)據(jù)的代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
vue實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Vue項(xiàng)目中使用flow做類(lèi)型檢測(cè)的方法
這篇文章主要介紹了Vue項(xiàng)目中使用flow做類(lèi)型檢測(cè)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Vue3中provide和inject作用和場(chǎng)景
Vue3中provide和inject作用和場(chǎng)景是頂層組件向任意的底層組件傳遞數(shù)據(jù)和方法,實(shí)現(xiàn)跨層組件通信,本文通過(guò)實(shí)例介紹Vue3 provide和inject的相關(guān)知識(shí),感興趣的朋友一起看看吧2023-11-11
Vuex中的getter和mutation的區(qū)別詳解
在現(xiàn)代前端開(kāi)發(fā)中,狀態(tài)管理是一個(gè)不可忽視的話(huà)題,而Vuex作為Vue.js的官方狀態(tài)管理庫(kù),在大型應(yīng)用中扮演著至關(guān)重要的角色,當(dāng)我們使用Vuex進(jìn)行狀態(tài)管理時(shí),getter和mutation是兩個(gè)重要的概念,在本文中,我們將詳細(xì)探討getter和mutation的區(qū)別,需要的朋友可以參考下2024-12-12
詳解Element-ui NavMenu子菜單使用遞歸生成時(shí)使用報(bào)錯(cuò)
這篇文章主要介紹了詳解Element-ui NavMenu子菜單使用遞歸生成時(shí)使用報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Vue實(shí)現(xiàn)左右菜單聯(lián)動(dòng)實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)左右菜單聯(lián)動(dòng)實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

