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

基于vue+elementPlus的動態(tài)導航標簽欄tabs具體過程

 更新時間:2024年10月26日 15:25:00   作者:我愛吃干果  
這篇文章主要給大家介紹了關(guān)于基于vue+elementPlus的動態(tài)導航標簽欄tabs的相關(guān)資料,本文主要詳述了在系統(tǒng)上添加導航標簽欄功能時,首次嘗試的過程,并且希望能為同行提供一個小demo,需要的朋友可以參考下

今天來寫一個導航標簽欄,哈哈,我也不清楚這個功能是不是這個名字。

今天領導說要在系統(tǒng)重添加個導航標簽欄的功能,雖然很簡單但我是第一次做這個功能,有些地方可能想的不夠完美,希望如果有更好想法的朋友能指點指點。如果還可以,也希望給各位同行提供一個小demo,用的時候可以直接拿來用。嘻嘻?。?!

實現(xiàn)思路

首先用到了element-plus框架中tabs的組件,然后數(shù)據(jù)我這里是通過vuex來維護的。在點擊菜單的同時往vuex相關(guān)數(shù)據(jù)數(shù)組中添加一項數(shù)據(jù)即可,刪除也一樣的道理。具體的實現(xiàn)如下:

具體過程

首先,創(chuàng)建一個HeaderTabs.vue的組件,我們使用時直接引用即可

<template>
    <div class="head_tabs">
      <keep-alive>
          <el-tabs
              v-model="HeaderTabsActiveName"
              type="card"
              @tab-click="handlePathSwicth"
              class="handleTabs"
              closable
              @tab-remove="removeHeaderTabsList"
          > 
              <el-tab-pane
                  v-for="(item,index) in HeaderTabsList"
                  :key="index"
                  :label="item.topic"
                  :name="item.path"
                  >
              </el-tab-pane>
          </el-tabs>
      </keep-alive>
    </div>
</template>
<script setup>
import { ref ,watch,computed, onMounted} from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex';
// 聲明路由對象
const router = useRouter();
// 聲明vuex對象
const store = useStore();

const HeaderTabsActiveName = ref('')
const HeaderTabsList = ref([])

onMounted(()=>{
  // 這里的數(shù)據(jù)都是在vuex中獲取的
  HeaderTabsList.value = store.state.HeaderTabs;
  HeaderTabsActiveName.value = store.state.TabsActiveName;
})

// 這里直接監(jiān)聽vuex的數(shù)據(jù)會導致失效,這里可能是因為vue性能問題,vue的底層沒有給vuex的數(shù)據(jù)也進行數(shù)據(jù)綁定吧
// 因此,這里使用computed這個api函數(shù)來返回vuex中的值,然后將此方法體放入watch中監(jiān)聽
const getTabsActiveName = computed(()=>{
	return store.state.TabsActiveName;
})

// 使用watch監(jiān)聽vuex的數(shù)據(jù),并開啟第一次綁定監(jiān)聽--immediate 
watch(getTabsActiveName,(o1)=>{
  if(o1){
    // 我們每添加條數(shù)據(jù)都需要修改相關(guān)的tabs索引,否則選中項是不會高亮的
    HeaderTabsActiveName.value = o1;
  }
},{ immediate: true })

// 標簽點擊觸發(fā)
const handlePathSwicth = (targetName)=>{
  let name = targetName.props.name;
  store.commit("updateTabsActiveName",name);
  HeaderTabsActiveName.value = name;
  // 手動跳轉(zhuǎn),組件不會提供跳轉(zhuǎn)功能
  router.push({
    path:name
  })
}
// 刪除tabs觸發(fā)
const removeHeaderTabsList = (targetName) => {
  // 使用vuex中自定義的方法刪除數(shù)據(jù)
  store.commit('removeHeaderTabs', targetName)

  setTimeout(()=>{
    // 利用定時器達到延時方法,防止HeaderTabsActiveName還未變就執(zhí)行下面的跳轉(zhuǎn)
    router.push({
      path:HeaderTabsActiveName.value
    })
  },0)
}
</script>

下面我們開始編寫vuex中的內(nèi)容

vuex主要的角色是來維護我們的數(shù)據(jù),讓我們的數(shù)據(jù)達到共享的效果,使得我們的數(shù)據(jù)可以在系統(tǒng)中共同使用和維護。 但是使用vuex時需要的代碼量要比pinia要麻煩點。因為本系統(tǒng)采用的是vuex的數(shù)據(jù)存儲方法,因此我們使用vuex的寫法,用pinia編寫時的邏輯都是一樣的。(這里只將關(guān)鍵代碼顯示出來。vuex的具體用法直接百度即可)

首先在state.ts文件中編寫聲明相關(guān)數(shù)據(jù)。

import {ref} from 'vue'
//初始化vuex的數(shù)據(jù)
const state = {
    // tabs面包屑的數(shù)據(jù)
    HeaderTabs:[
      {
        topic:"首頁",
        path:'/home'
      }
    ],
    TabsActiveName: ref("/home")
  }
export { state }

然后在mutations.ts文件中編寫相關(guān)方法。

// 修改tabs的索引綁定
updateTabsActiveName(state,msg){
  // 修改標簽索引
  state.TabsActiveName = msg
},
// 添加tabs標簽
addHeaderTabs(state,msg){
  // 用filter過濾器看添加項是否已存在,如果存在則不添加
  let f = state.HeaderTabs.filter(t=>{
    return t.path == msg.path
  })
  if(f.length==0){
    state.HeaderTabs.push(msg)
  }
  state.TabsActiveName = msg.path
},
// 刪除tabs標簽
removeHeaderTabs(state,msg){
  // 如果要刪除的是首頁就直接退出,這里根據(jù)業(yè)務而定
  if(msg=="/home") return;
  // 通過循環(huán)方式找到要刪除的數(shù)據(jù)項
  state.HeaderTabs.forEach((item,index)=>{
    if(item.path==msg){
      state.HeaderTabs.splice(index,1);
      return true;
    }
  })
  // 如果當前顯示頁如刪除項一樣,則自動跳轉(zhuǎn)會首頁,這里也是根據(jù)具體業(yè)務而定
  if(state.TabsActiveName==msg){
    state.TabsActiveName = "/home"
  }
}

菜單項調(diào)用添加邏輯

最后在需要添加的tabs標簽的地方增加新增按鈕即可,這里直接在系統(tǒng)的菜單欄操作。當用戶點擊菜單項時不僅跳轉(zhuǎn)相關(guān)路由,還調(diào)用剛才相關(guān)的方法,具體代碼如下:

// 這里是LeftMenu.vue中
// 菜單點擊時觸發(fā)的方法
menuClick(row){
    // 將當前點擊的對象傳遞給指定方法
    this.store.commit("addHeaderTabs",row)
    // 跳轉(zhuǎn)相關(guān)路由
    this.router.push({
        path:row.path
    })
}

應用于界面 

最后,最關(guān)鍵的一步,我們現(xiàn)在只是寫好了邏輯,但是還沒在頁面上顯示呢。接下來在自己的主界面上引入組件。

不使用setup語法糖時:

<template>
    <div class="index">
      <HeaderTabs></HeaderTabs>
    </div>
</template>
<script>
import { defineComponent } from '@vue/composition-api'
//@ 后是自己組件的真實路徑
import HeaderTabs from '@/components/page/component/HeaderTabs.vue'
export default defineComponent({
    components:{
        HeaderTabs
    },
})
</script>

 使用setup語法糖:

<template>
    <div class="index">
      <HeaderTabs></HeaderTabs>
    </div>
</template>
<script setup>
import HeaderTabs from '@/components/page/component/HeaderTabs.vue'
</script>

實現(xiàn)效果

新增:

 刪除:

公司系統(tǒng)是保密項,不能直接放出來,我直接在自己的畢設項目上添加的,所有樣式看起來有點倉促。哈哈。 

總結(jié)

到此這篇關(guān)于基于vue+elementPlus的動態(tài)導航標簽欄tabs的文章就介紹到這了,更多相關(guān)vue elementPlus動態(tài)導航標簽欄tabs內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實現(xiàn)自定義多選與單選的答題功能

    vue實現(xiàn)自定義多選與單選的答題功能

    這篇文章主要介紹了使用vue實現(xiàn)自定義多選與單選的答題功能,vue組件中在表單方面提供了一個v-model指令,非常好用,具體實現(xiàn)過程大家跟隨腳本之家小編一起看看吧
    2018-07-07
  • Element el-table 表格使用詳解

    Element el-table 表格使用詳解

    我們的數(shù)據(jù)存儲到數(shù)據(jù)庫,不就是以表格的形式存在嗎,所以在界面上顯示、操作,使用表格來處理也是非常合理的,這篇文章給大家介紹Element el-table 表格使用方法,感興趣的朋友一起看看吧
    2024-03-03
  • Vue?router?路由守衛(wèi)詳解

    Vue?router?路由守衛(wèi)詳解

    這篇文章主要為大家介紹了Vue?router?路由守衛(wèi),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • VUE組件中的 Drawer 抽屜實現(xiàn)代碼

    VUE組件中的 Drawer 抽屜實現(xiàn)代碼

    這篇文章主要介紹了VUE組件 之 Drawer 抽屜 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Vue.js中的高級面試題及答案

    Vue.js中的高級面試題及答案

    Vue-loader 是 Webpack 的加載模塊,它使我們可以用 Vue 文件格式編寫單文件組件。這篇文章主要介紹了Vue.js的高級面試題以及答案,需要的朋友可以參考下
    2020-01-01
  • vue使用canvas的教程詳解

    vue使用canvas的教程詳解

    Vue.js?是一個流行的?JavaScript?框架,用于構(gòu)建用戶界面,它提供了一種簡潔的方式來管理和渲染數(shù)據(jù),同時也支持與其他庫和工具的集成,本文主要來和大家聊聊如何在vue中使用canvas,有需要的可以參考下
    2023-09-09
  • Vue3中使用styled-components的實現(xiàn)

    Vue3中使用styled-components的實現(xiàn)

    本文主要介紹了Vue3中使用styled-components的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • Vue事件修飾符使用詳細介紹

    Vue事件修飾符使用詳細介紹

    在Vue中,修飾符處理了許多DOM事件的細節(jié),讓我們不再需要花大量的時間去處理這些煩惱的事情,而能有更多的精力專注于程序的邏輯處理
    2022-10-10
  • vue3如何使用element-plus的dialog

    vue3如何使用element-plus的dialog

    這篇文章主要介紹了vue3優(yōu)雅的使用element-plus的dialog,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法

    Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法

    今天小編就為大家分享一篇Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論