欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue2.* element tabs tab-pane 動(dòng)態(tài)加載組件操作

 更新時(shí)間:2020年07月19日 14:55:33   作者:蘇夏  
這篇文章主要介紹了vue2.* element tabs tab-pane 動(dòng)態(tài)加載組件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

一、重要部分

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è)陂_發(fā)中遇到tab切換,這時(shí)候用el的el-tabs感覺很方便

但當(dāng)我在把代碼都寫完后,發(fā)現(xiàn)一個(gè)問題就是頁面打開時(shí)

雖然我們只能看見當(dāng)前一個(gè)tab頁,但是vue會(huì)幫你把你寫的所有tab頁的內(nèi)容都渲染出來了,只是其他的隱藏了,同時(shí)其他tab的js也都走了一邊,當(dāng)你點(diǎn)擊tab時(shí)js就不會(huì)再去請(qǐng)求后臺(tái)

這種機(jī)制會(huì)造成一個(gè)問題,就是如果每個(gè)tab頁的數(shù)據(jù)都過大的時(shí)候,可能就會(huì)導(dǎo)致首次打開頁面卡頓現(xiàn)象,同時(shí)如果數(shù)據(jù)庫數(shù)據(jù)在實(shí)時(shí)發(fā)生變化的話,比如你一分鐘前打開的這個(gè)頁面,看的是tab1的內(nèi)容,看了1分鐘后我想看tab2的內(nèi)容,但此時(shí)tab2的內(nèi)容后臺(tái)數(shù)據(jù)庫已經(jīng)發(fā)生變化了,你能看到的只是1分鐘前的數(shù)據(jù),那該怎么解決這個(gè)問題呢?

首先一開始一次加載所有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ā)揮出來了,當(dāng)v-if的值為false時(shí)vue是不會(huì)去渲染該標(biāo)簽下的內(nèi)容的

那我們就把tabs下的子模塊標(biāo)簽上加v-if,一開始只設(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>

這樣就可以完美解決上面的問題,首次加載頁面只會(huì)渲染其中一個(gè)tab的內(nèi)容,同時(shí)點(diǎn)擊tab切換時(shí)頁面重新渲染頁面,good!

el-table中動(dòng)態(tài)表頭的寫法

其實(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)加載組件操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue控制滾動(dòng)條滑到某個(gè)位置的方法實(shí)例

    vue控制滾動(dòng)條滑到某個(gè)位置的方法實(shí)例

    當(dāng)容器有滾動(dòng)條時(shí),有時(shí)需要將滾動(dòng)條滑到某個(gè)位置,下面這篇文章主要給大家介紹了關(guān)于vue控制滾動(dòng)條滑到某個(gè)位置的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • vue中多附件上傳的實(shí)現(xiàn)示例

    vue中多附件上傳的實(shí)現(xiàn)示例

    這篇文章主要介紹了vue中多附件上傳的實(shí)現(xiàn)示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-04-04
  • Vue模仿ElementUI的form表單實(shí)例代碼

    Vue模仿ElementUI的form表單實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Vue模仿ElementUI的form表單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Vue實(shí)現(xiàn)一個(gè)圖片懶加載插件

    Vue實(shí)現(xiàn)一個(gè)圖片懶加載插件

    這篇文章主要給大家介紹了關(guān)于利用Vue實(shí)現(xiàn)一個(gè)圖片懶加載的插件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁的原因與最優(yōu)解

    vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁的原因與最優(yōu)解

    頁面刷新白屏其實(shí)是因?yàn)関uex引起的,由于刷新頁面vuex數(shù)據(jù)會(huì)丟失,這篇文章主要給大家介紹了關(guān)于vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁的原因與最優(yōu)解的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 在Vue中實(shí)現(xiàn)文件預(yù)覽與打印的代碼示例

    在Vue中實(shí)現(xiàn)文件預(yù)覽與打印的代碼示例

    在Vue應(yīng)用中,有時(shí)我們需要實(shí)現(xiàn)文件預(yù)覽和打印的功能,比如,我們可能需要預(yù)覽并打印PDF文件、圖片文件等,本文將介紹如何在Vue中實(shí)現(xiàn)文件預(yù)覽和打印的功能,并提供相應(yīng)的代碼示例
    2023-06-06
  • vue3中如何使用Pinia實(shí)現(xiàn)數(shù)據(jù)持久化操作

    vue3中如何使用Pinia實(shí)現(xiàn)數(shù)據(jù)持久化操作

    使用vue3中的pinia,我們可以在多個(gè)頁面間共享數(shù)據(jù),但是一旦我們關(guān)閉或刷新頁面,這些數(shù)據(jù)就會(huì)丟失,因此,我們需要有一種數(shù)據(jù)持久化的解決方案,下面我們就來看看具體如何解決的吧
    2023-10-10
  • 基于ant-design-vue實(shí)現(xiàn)表格操作按鈕組件

    基于ant-design-vue實(shí)現(xiàn)表格操作按鈕組件

    這篇文章主要為大家介紹了基于ant-design-vue實(shí)現(xiàn)表格操作按鈕組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • vue系列之requireJs中引入vue-router的方法

    vue系列之requireJs中引入vue-router的方法

    這篇文章主要介紹了vue系列之requireJs中引入vue-router的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue-router啟用history模式下的開發(fā)及非根目錄部署方法

    vue-router啟用history模式下的開發(fā)及非根目錄部署方法

    這篇文章主要介紹了vue-router啟用history模式下的開發(fā)及非根目錄部署方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12

最新評(píng)論