溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vue?elementUi中的tabs標(biāo)簽頁如何使用

發(fā)布時(shí)間:2023-03-23 16:25:17 來源:億速云 閱讀:281 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“vue elementUi中的tabs標(biāo)簽頁如何使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“vue elementUi中的tabs標(biāo)簽頁如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

    一、整體頁面布局與完成效果

    整體界面(mainview.vue)布局如下圖:

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    代碼結(jié)構(gòu)

    標(biāo)簽頁主要在mainview中編寫

    //mainview.vue
    <template>
    <el-container>
            <el-header>header頂部欄</el-header>
            <el-container>
                <el-aside>
                aside側(cè)邊欄
                <leftbar></leftbar>//leftbar.vue
                </el-aside>
                <el-main>main主界面
                		<el-tabs>標(biāo)簽頁
                			<el-tab-pane>
                				標(biāo)簽頁顯示區(qū)域
                			</el-tab-pane>
                		</el-tabs>
                </el-main>
            </el-container>
        </el-container>
     <template>

    即在Main中添加Tabs標(biāo)簽頁,實(shí)現(xiàn)在側(cè)邊欄中點(diǎn)擊功能鍵后,在圖中紅色框部分出現(xiàn)標(biāo)簽,點(diǎn)擊可跳轉(zhuǎn)界面。

    登陸默認(rèn)“首頁界面”開啟且不可關(guān)閉,其余界面可手動(dòng)開啟,手動(dòng)關(guān)閉。
    完成效果如下圖:

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    二、代碼編寫

    1.標(biāo)簽頁引入

    標(biāo)簽頁代碼如下

    	<el-tabs class="tabs" 
    	         v-model="editableTabsValue" 
                 type="border-card" 
                 @tab-remove="removeTab"
                 @tab-click="clickTab">
               <el-tab-pane class="tab-pane" 
               				v-for="item in editableTabs" 						      
               				:closable="item.close" 
                            :key="item.name" 
                            :label="item.title" 
                            :name="item.name" >
                             {{item.content}}
                            <RouterView></RouterView>//標(biāo)簽頁界面路由顯示
                </el-tab-pane>
         </el-tabs>

    2.標(biāo)簽頁參數(shù)設(shè)置

    2.1 標(biāo)簽頁主要參數(shù)

    標(biāo)簽頁的數(shù)據(jù)存放在vuex的store中,在store.state中添加兩個(gè)參數(shù)的定義,設(shè)置的初始數(shù)據(jù)為“首頁界面”的數(shù)據(jù)。

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    state: {
        	//當(dāng)前打開的界面路由,初始值為主頁的路由
        editableTabsValue:'/mainview/index',
        //存放當(dāng)前打開的標(biāo)簽頁的數(shù)組,初始時(shí)只有首頁
        editableTabs:[{
          title:'首頁',//標(biāo)簽頁名
          name:'/mainview/index',//標(biāo)簽頁路由
          close:false//該標(biāo)簽頁是否可關(guān)閉,這里是首頁標(biāo)簽頁不可被關(guān)閉
        }]
      },
    2.2 打開和切換標(biāo)簽頁方法

    然后在mutation中添加兩個(gè)方法,操作這兩個(gè)參數(shù),以控制標(biāo)簽頁的打開和切換。

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    ADD_TABS:(state,tab)=>{//增加標(biāo)簽頁方法
    	//在editableTabs中查找此界面是否已打開,否進(jìn)入if
       if(state.editableTabs.findIndex(e=>e.name===tab.path)===-1){
            state.editableTabs.push({//添加當(dāng)前標(biāo)簽頁進(jìn)入editableTabs
              title:tab.name,
              name:tab.path,
              close:true//使除了首頁標(biāo)簽頁外其他都可關(guān)閉
            })
          }
          state.editableTabsValue=tab.path//添加標(biāo)簽頁后默認(rèn)打開
    },
    CHANGE_TABS:(state,name)=>{//切換標(biāo)簽頁方法
    		 //將需打開標(biāo)簽頁路由賦予editableTabsvalue
          state.editableTabsValue=name
    },
    2.3 mainview中添加數(shù)據(jù)

    在mainview的data中添加并獲取state中的數(shù)據(jù),注意引入ref

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    2.4 側(cè)邊欄相關(guān)設(shè)置

    在leftbar.vue的data中添加參數(shù)submenuList,用于存放側(cè)邊導(dǎo)航欄欄位數(shù)據(jù)。

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    此處代碼為elementUI導(dǎo)航欄代碼,不做過多解釋,注意添加opentab方法。

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    2.5 標(biāo)簽頁的打開

    opentab方法,點(diǎn)擊側(cè)邊欄欄位以打開標(biāo)簽頁,調(diào)用ADD_TABS方法。

    注意:1、導(dǎo)入store 2、此方法寫在leftbar.vue中,也就是說只有點(diǎn)擊側(cè)邊欄才能打開標(biāo)簽頁。

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    側(cè)邊欄效果如下圖:

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    3.標(biāo)簽頁的切換和關(guān)閉

    3.1切換標(biāo)簽頁方法

    前面已經(jīng)在store的mutation中寫過打開(ADD_TABS)和切換(CHANGE_TABS)兩個(gè)方法了,opentab寫在側(cè)邊欄(leftbar.vue)中,調(diào)用了打開方法(ADD_TABS)以實(shí)現(xiàn)點(diǎn)擊側(cè)邊欄打開標(biāo)簽頁。

    調(diào)用切換(CHANGE_TABS)的方法則要寫在mainview中,如下圖。

    vue?elementUi中的tabs標(biāo)簽頁如何使用

    在method中添加clickTab方法

    clickTab(tab){
                var name=JSON.stringify(tab.paneName).replace('"','').replace('"','')//對(duì)tab參數(shù)處理,以獲得當(dāng)前點(diǎn)擊的標(biāo)簽頁的路由
                store.commit('CHANGE_TABS',name)//調(diào)用切換方法切換標(biāo)簽頁
                router.push(name)//路由跳轉(zhuǎn)以實(shí)現(xiàn)切換界面
        }
    3.2 刷新方法

    我們需要一個(gè)方法在更新完state中的參數(shù),同步更新mainview中的參數(shù)。

    refreshTabs(){
            // console.log("refresh");
            this.editableTabsValue=store.state.editableTabsValue;
            this.editableTabs=store.state.editableTabs;
        },

    代碼很簡(jiǎn)單,直接賦值就可以,重要的是需要在state數(shù)據(jù)更新時(shí),同步更新mainview中數(shù)據(jù),所以需要搞一個(gè)監(jiān)聽器,調(diào)用refreshTabs方法以實(shí)現(xiàn)同步更新數(shù)據(jù)。

    3.3 監(jiān)聽以同步數(shù)據(jù)

    在mainview的watch中,監(jiān)聽state,如有變化則同步更新數(shù)據(jù),這樣就實(shí)現(xiàn)了點(diǎn)擊標(biāo)簽頁后的實(shí)時(shí)切換。

    watch:{
        "$store.state":{
                deep:true,
                handler:function(){
                    this.refreshTabs();
                }
            },
    3.4 標(biāo)簽頁的關(guān)閉

    在mainview的method中添加removeTab方法,這里我直接復(fù)制了elementUI中的removeTab方法。
    這個(gè)方法可以實(shí)現(xiàn),關(guān)閉一個(gè)標(biāo)簽頁后,會(huì)自動(dòng)打開旁邊的標(biāo)簽頁。

    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;
                  }
                }
              });
            }
            store.state.editableTabsValue=activeName;
            store.state.editableTabs=tabs.filter(tab=>tab.name!==targetName);
            router.push(activeName)
        },

    讀到這里,這篇“vue elementUi中的tabs標(biāo)簽頁如何使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI