最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

實現(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)是保密項,不能直接放出來,我直接在自己的畢設(shè)項目上添加的,所有樣式看起來有點倉促。哈哈。 

總結(jié)

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

相關(guān)文章

  • vue使用echarts圖表自適應的幾種解決方案

    vue使用echarts圖表自適應的幾種解決方案

    這篇文章主要給大家介紹了關(guān)于vue使用echarts圖表自適應的幾種解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • vuex中store.commit和store.dispatch的區(qū)別及使用方法

    vuex中store.commit和store.dispatch的區(qū)別及使用方法

    這篇文章主要介紹了vuex中store.commit和store.dispatch的區(qū)別及使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue實現(xiàn)移動端input上傳視頻、音頻

    vue實現(xiàn)移動端input上傳視頻、音頻

    這篇文章主要為大家詳細介紹了vue實現(xiàn)移動端input上傳視頻、音頻,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Vue虛擬dom被創(chuàng)建的方法

    Vue虛擬dom被創(chuàng)建的方法

    這篇文章主要介紹了Vue虛擬dom是如何被創(chuàng)建的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 如何使用vue3打造一個物料庫

    如何使用vue3打造一個物料庫

    這篇文章主要介紹了如何使用vue3打造一個物料庫,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-05-05
  • Vue3進行路由管理的示例代碼

    Vue3進行路由管理的示例代碼

    在現(xiàn)代 Web 開發(fā)中,前端路由管理是構(gòu)建單頁面應用(SPA)的關(guān)鍵組成部分,隨著 Vue3 的發(fā)布,Vue Router 也得到了相應的更新,在這篇博文中,我們將詳細探討 Vue3 中的路由管理,需要的朋友可以參考下
    2025-01-01
  • vue3的watch用法以及和vue2中watch的區(qū)別

    vue3的watch用法以及和vue2中watch的區(qū)別

    這篇文章主要介紹了vue3的watch用法以及和vue2中watch的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue登錄功能實現(xiàn)全套詳解(含封裝axios)

    Vue登錄功能實現(xiàn)全套詳解(含封裝axios)

    登錄功能對于前端剛?cè)腴T不久的同學來說較為困難,下面這篇文章主要給大家介紹了關(guān)于Vue登錄功能實現(xiàn)(含封裝axios)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 使用Vue 實現(xiàn)滑動驗證碼功能

    使用Vue 實現(xiàn)滑動驗證碼功能

    本文章主要來介紹一下第一個階段,也就是前端校驗的驗證碼的實現(xiàn),下面來介紹一下拖動驗證碼的具體實現(xiàn)。這篇文章主要介紹了利用 Vue 實現(xiàn)滑動驗證碼,需要的朋友可以參考下
    2019-06-06
  • Element UI框架中巧用樹選擇器的實現(xiàn)

    Element UI框架中巧用樹選擇器的實現(xiàn)

    這篇文章主要介紹了Element UI框架中巧用樹選擇器的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

武定县| 墨玉县| 建湖县| 陇川县| 虞城县| 抚松县| 高雄县| 长武县| 建宁县| 宁河县| 安多县| 松阳县| 睢宁县| 儋州市| 伊春市| 墨竹工卡县| 临城县| 营山县| 潜山县| 三原县| 拉萨市| 岳阳县| 哈密市| 大余县| 昆明市| 合川市| 吴忠市| 密云县| 阿巴嘎旗| 桑植县| 奉贤区| 荆门市| 昔阳县| 宁阳县| 苍南县| 虎林市| 临潭县| 大石桥市| 乐安县| 贵港市| 沂南县|