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

vue3+Typescript實(shí)現(xiàn)路由標(biāo)簽頁(yè)和面包屑功能

 更新時(shí)間:2023年05月06日 09:49:41   作者:小城夏記  
在使用 Vue.js 開(kāi)發(fā)后臺(tái)管理系統(tǒng)時(shí),經(jīng)常會(huì)遇到需要使用路由標(biāo)簽頁(yè)的場(chǎng)景,這篇文章主要介紹了vue3+Typescript實(shí)現(xiàn)路由標(biāo)簽頁(yè)和面包屑,需要的朋友可以參考下

在vue中實(shí)現(xiàn)路由標(biāo)簽頁(yè)和面包屑

在使用 Vue.js 開(kāi)發(fā)后臺(tái)管理系統(tǒng)時(shí),經(jīng)常會(huì)遇到需要使用路由標(biāo)簽頁(yè)的場(chǎng)景。本文介紹如何使用 Vue.js 實(shí)現(xiàn)路由標(biāo)簽頁(yè)。

需求分析

我們需要實(shí)現(xiàn)以下功能:

  • 點(diǎn)擊菜單或路由時(shí),在頁(yè)面上打開(kāi)一個(gè)新標(biāo)簽頁(yè)。
  • 根據(jù)當(dāng)前路由自動(dòng)添加標(biāo)簽,如果標(biāo)簽已存在則不再添加。
  • 可以通過(guò)關(guān)閉標(biāo)簽來(lái)切換當(dāng)前標(biāo)簽頁(yè),并自動(dòng)跳轉(zhuǎn)到前一個(gè)標(biāo)簽頁(yè)所對(duì)應(yīng)的路由。

最終效果

在這里插入圖片描述

實(shí)現(xiàn)步驟

第一步:創(chuàng)建路由標(biāo)簽組件和面包屑

我們可以使用 Element UI 中的 el-tagbreadcrumb組件來(lái)實(shí)現(xiàn)路由標(biāo)簽以及面包屑

                <el-header height="80px">
                    <div class="head_info">
                        <div class="head_local">
                            <el-breadcrumb>
                                <el-breadcrumb-item :to="{ path: '/console' }">主頁(yè)</el-breadcrumb-item>
                                <el-breadcrumb-item>{{ title }}</el-breadcrumb-item>
                            </el-breadcrumb>
                        </div>
                    </div>
                    <div class="head_tag">
                        <el-tag v-for="tag, index in tags" :key="index" :closable="tag.path !== '/console'" class="mx-1"
                            :disable-transitions="false" @close="handleClose(tag)">
                            <router-link :to="tag.path">{{ tag.name }}</router-link>
                        </el-tag>
                    </div>
                </el-header>

在組件中,我們首先使用 defineProps 創(chuàng)建一個(gè)名為 tag 的屬性來(lái)接收標(biāo)簽對(duì)象。然后,在模板中使用 v-bind="$attrs" 將所有父級(jí)作用域中的屬性傳遞給 el-tag 組件。最后,我們將標(biāo)簽的標(biāo)題和路由鏈接包含在 router-link 組件中。

第二步:創(chuàng)建路由標(biāo)簽數(shù)組

定義了一個(gè)名為tags的響應(yīng)式數(shù)據(jù)對(duì)象,有兩個(gè)屬性,分別是 name 和 path,表示標(biāo)簽頁(yè)的名稱和路徑。默認(rèn)首頁(yè)加入tag標(biāo)簽組,后面加入判斷條件將首頁(yè)不可刪除。

const tags = reactive([
    { name: '首頁(yè)', path: '/console' }
])

第三步:監(jiān)聽(tīng)路由變化并自動(dòng)添加新標(biāo)簽

我們可以使用 watchEffect 函數(shù)來(lái)監(jiān)聽(tīng)當(dāng)前路由的變化,并根據(jù)當(dāng)前路由自動(dòng)添加新標(biāo)簽。

watchEffect(() => {
    // 如果當(dāng)前路徑不是 '/' 并且該路徑?jīng)]有對(duì)應(yīng)的標(biāo)簽,則新增一個(gè)標(biāo)簽
    if (route.path !== '/console' && !tags.some((tag) => tag.path === route.path)) {
        const tag = { name: route.meta.title as string, path: route.path };
        tags.push(tag);
    }
});

在上面的代碼中,我們首先檢查當(dāng)前路徑是否為“/console”,如果不是,則進(jìn)行如下操作:

  • 檢查當(dāng)前路徑是否已經(jīng)存在標(biāo)簽數(shù)組中。
  • 如果不存在,則創(chuàng)建一個(gè)新標(biāo)簽對(duì)象,并將其添加到標(biāo)簽數(shù)組中。

第四步:處理關(guān)閉標(biāo)簽事件

當(dāng)用戶點(diǎn)擊某個(gè)標(biāo)簽的關(guān)閉按鈕時(shí),我們需要從標(biāo)簽數(shù)組中刪除該標(biāo)簽,并自動(dòng)跳轉(zhuǎn)到前一個(gè)標(biāo)簽頁(yè)所對(duì)應(yīng)的路由。

const handleClose = (tag: any) => {
    const index = tags.findIndex((t) => t.path === tag.path);
    if (index !== -1) {
        router.push(tags[index - 1].path);
        setTimeout(() => {
            tags.splice(index, 1);
        }, 0)
    }
}

在上面的代碼中,我們首先通過(guò)findIndex獲取要關(guān)閉的標(biāo)簽對(duì)象在標(biāo)簽數(shù)組中的索引。然后,使用 router.push 將頁(yè)面自動(dòng)跳轉(zhuǎn)到前一個(gè)標(biāo)簽頁(yè)所對(duì)應(yīng)的頁(yè)面。這里使用setTimeout函數(shù)主要是進(jìn)行異步操作,為了確保刪除操作在下一次 DOM 渲染時(shí)進(jìn)行。如果不添加的話會(huì)導(dǎo)致用戶點(diǎn)擊后頁(yè)面跳轉(zhuǎn)了,但是tag標(biāo)簽沒(méi)有進(jìn)行關(guān)閉。

第五步:當(dāng)前路由標(biāo)題同步面包屑

const title = computed(() => route.meta.title);

使用 route.meta.title 表達(dá)式獲取當(dāng)前路由信息對(duì)象中的meta屬性下的 title 值。這里的 meta 屬性可以在路由配置信息中設(shè)置,用于存儲(chǔ)一些與路由相關(guān)的元數(shù)據(jù),以便在程序運(yùn)行時(shí)進(jìn)行訪問(wèn)和使用。當(dāng) title 計(jì)算屬性的值發(fā)生變化時(shí),與之相關(guān)聯(lián)的 DOM 元素也會(huì)自動(dòng)更新。

其他補(bǔ)充:

路由信息:

  {
    path:"/adminIndex",
    component:adminIndex,
    meta:{title: '主頁(yè)' },
    children:[
      {
        path: "/console",
        component: Console,
        meta:{title: '工作臺(tái)' }
      },
      {
        path:"/newList",
        component:newList,
        meta:{title: '新聞管理-視頻管理' }
      },
      {
        path:"/paperList",
        component:paperList,
        meta:{title: '文章管理' }
      }
    ]
  },

到此這篇關(guān)于vue3+Typescript實(shí)現(xiàn)路由標(biāo)簽頁(yè)和面包屑的文章就介紹到這了,更多相關(guān)vue3面包屑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件詳解

    Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件詳解

    這篇文章主要介紹了Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue源碼cached解析

    Vue源碼cached解析

    最近在寫(xiě)閉包的應(yīng)用的時(shí)候,出現(xiàn)了一個(gè)cached函數(shù),來(lái)源于Vue源碼,利用了閉包變量不會(huì)被回收的特點(diǎn),可以緩存變量,cached本質(zhì)上是一個(gè)高階函數(shù),它接受一個(gè)函數(shù)的參數(shù),同時(shí)返回一個(gè)函數(shù)
    2022-08-08
  • vue父組件觸發(fā)事件改變子組件的值的方法實(shí)例詳解

    vue父組件觸發(fā)事件改變子組件的值的方法實(shí)例詳解

    這篇文章主要介紹了vue父組件觸發(fā)事件改變子組件的值的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Vue3手動(dòng)清理keep-alive組件緩存的方法詳解

    Vue3手動(dòng)清理keep-alive組件緩存的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3中手動(dòng)清理keep-alive組件緩存的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 解決Electron?store的commit和dispatch不好用問(wèn)題

    解決Electron?store的commit和dispatch不好用問(wèn)題

    這篇文章主要介紹了解決Electron?store的commit和dispatch不好用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue實(shí)現(xiàn)動(dòng)態(tài)樣式的多種方法匯總

    Vue實(shí)現(xiàn)動(dòng)態(tài)樣式的多種方法匯總

    本文要給大家介紹Vue實(shí)現(xiàn)動(dòng)態(tài)樣式的多種方法,下面給大家?guī)?lái)幾個(gè)案列,需要的朋友可以借鑒研究一下。
    2021-06-06
  • vue實(shí)現(xiàn)視頻全屏切換功能

    vue實(shí)現(xiàn)視頻全屏切換功能

    這篇文章主要為大家詳細(xì)介紹了如何使用vue實(shí)現(xiàn)視頻全屏切換的功能,文中的示例代碼講解詳細(xì), 具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2023-11-11
  • vue3中ref動(dòng)態(tài)綁定的技巧詳解

    vue3中ref動(dòng)態(tài)綁定的技巧詳解

    這篇文章主要為大家詳細(xì)介紹了vue3中ref動(dòng)態(tài)綁定的相關(guān)技巧,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2024-01-01
  • vue服務(wù)端渲染添加緩存的方法

    vue服務(wù)端渲染添加緩存的方法

    vue服務(wù)區(qū)緩存分為頁(yè)面緩存、組建緩存和接口緩存,本文通過(guò)實(shí)例代碼逐一給大家介紹,本文重點(diǎn)給大家介紹vue服務(wù)端渲染添加緩存的方法,感興趣的朋友跟隨小編一起看看吧
    2018-09-09
  • vue.js國(guó)際化 vue-i18n插件的使用詳解

    vue.js國(guó)際化 vue-i18n插件的使用詳解

    本篇文章主要介紹了vue.js國(guó)際化 vue-i18n插件的使用詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論