主頁 > 企業開發 > vue全家桶進階之路34:Vue3 路由基本配置

vue全家桶進階之路34:Vue3 路由基本配置

2023-04-19 08:25:18 企業開發

在Vue3中,路由的基本配置是通過使用Vue Router庫來實作的,以下是Vue3中路由的基本配置步驟:

  1. 安裝Vue Router

使用npm或yarn在專案中安裝Vue Router:

npm install vue-router
// 或者
yarn add vue-router
  1. 創建路由實體

創建一個路由實體并定義路由規則,路由規則是一個物件陣列,其中每個物件都定義了一個路由的路徑和組件,

例如,以下代碼定義了兩個路由規則:

import { createRouter, createWebHistory } from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

在這個例子中,我們匯入了createRoutercreateWebHistory函式,createRouter函式用于創建路由實體,createWebHistory函式用于指定路由的歷史記錄模式,我們還定義了兩個路由規則:一個路由規則對應路徑'/',另一個對應路徑'/about',這些路由規則將路由到HomeAbout組件,

在 Vue Router 中,routes 是一個陣列,用于定義路由規則,每個路由規則都包含了如下屬性:

  • path:一個字串,表示路徑,可以包含動態片段和引數(如 /users/:id),
  • name:一個字串,表示路由的名稱,方便在代碼中參考,
  • component:一個組件,表示該路由對應的視圖組件,
  • components:一個物件,表示該路由對應的多個視圖組件,
  • redirect:一個字串或者一個函式,表示路由重定向的目標,可以是一個路徑或者是一個具有to屬性的物件,
  • alias:一個字串或者一個陣列,表示路由的別名,訪問別名等同于訪問路由本身,
  • meta:一個物件,表示該路由的元資訊,用于存盤一些額外的資訊(如頁面標題、是否需要登錄等),

除了上述常用屬性之外,還有一些其他的屬性用于更高級的路由管理,例如:

  • beforeEnter:一個函式,表示路由獨享的守衛,用于在路由切換前執行一些操作,
  • props:一個布林值或者一個函式,表示是否將組件的 props 屬性和 URL 引數映射到組件的 props 屬性中,或者自定義如何映射,
  • caseSensitive:一個布林值,表示該路由是否區分大小寫,默認為 false,
  • pathToRegexpOptions:一個物件,用于配置 path-to-regexp 庫的選項,
  • children:一個陣列,表示該路由的子路由,用于實作嵌套路由,

路由規則可以通過一個物件或者一個陣列來定義,例如:

// 定義單個路由規則
const homeRoute = {
  path: '/',
  name: 'Home',
  component: Home
}

// 定義多個路由規則
const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home //組件名方式加載
}, { path: '/about', name: 'About',
  component: () => import("../views/AboutView.vue"),// 懶加載
meta: { requiresAuth: true } } ]

 

在 Vue Router 中,可以使用兩種不同的 history 模式:hashhistory

  • createWebHashHistory():使用 URL 的 hash(即 URL 中的 #)來模擬一個完整的 URL,這種模式的優點是在不支持 HTML5 History API 的瀏覽器中也可以正常使用,缺點是 URL 比較丑陋,不利于 SEO,

  • createWebHistory():使用 HTML5 History API 來實作路由,URL 是真實的 URL,不需要 # 符號,這種模式的優點是 URL 更加美觀,不會出現 # 符號,缺點是需要瀏覽器支持 HTML5 History API,如果不支持則會出現兼容性問題,

在創建路由器實體時,需要通過 createWebHashHistory() 或者 createWebHistory() 函式來創建一個 history 物件,例如:

const router = createRouter({
// 使用 history 模式 history: createWebHistory(), routes, });
const router = createRouter({
// 使用 hash 模式 history: createWebHashHistory(), routes, });

在 Vue 中,可以使用 <router-view> 標簽來承載路由,<router-view> 標簽會根據當前的路由資訊動態渲染對應的組件,例如:

<template>
  <div>
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
    <router-view></router-view>
  </div>
</template>

在這個例子中,<router-view> 標簽承載路由,并在當前路由地址對應的組件中動態渲染內容,當用戶點擊鏈接切換路由時,<router-view> 標簽會自動更新并渲染新的組件,

需要注意的是,一個 Vue 應用只能有一個根組件,因此 <router-view> 標簽通常是在根組件中使用,在其他組件中,可以通過 name 屬性來指定具名視圖的名稱,從而在同一個組件中承載多個視圖,

<template>
  <div>
    <router-view></router-view>
    <router-view name="sidebar"></router-view>
  </div>
</template>

在這個例子中,根組件中有兩個 <router-view> 標簽,一個用于承載默認視圖,另一個用于承載名為 sidebar 的具名視圖,在路由配置中,可以通過 components 屬性來指定多個組件作為具名視圖的內容,

const router = new VueRouter({
  routes: [
    {
      path: '/',
      components: {
        default: Home,
        sidebar: Sidebar
      }
    }
  ]
})

在這個例子中,路由地址為 / 的路由將同時渲染 Home 組件和 Sidebar 組件,其中,Home 組件將被渲染到默認視圖中,Sidebar 組件將被渲染到名為 sidebar 的具名視圖中,

  1. 集成路由實體

將路由實體集成到Vue應用程式中,這可以在應用程式的根組件中完成,

例如,以下代碼將路由實體集成到根組件中:

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

<script>
import { createApp } from 'vue';
import router from './router';
import App from './App.vue';

const app = createApp(App);

app.use(router);

app.mount('#app');
</script>

在這個例子中,我們使用createApp函式創建一個Vue應用程式實體,并使用use方法將路由實體集成到應用程式中,我們還在模板中使用了router-view組件來渲染當前路由所匹配的組件,

  1. 創建路由鏈接(跳轉路由)

在 Vue.js 3.x 中,跳轉路由的方法和 Vue.js 2.x 略有不同,以下是幾種常見的跳轉路由的方法:

  • 使用 <router-link> 標簽

在模板中使用 <router-link> 標簽可以生成一個路由鏈接,并且當用戶點擊該鏈接時,自動跳轉到相應的路由,例如:

<router-link to="/about">Go to About</router-link>

在這個例子中,使用 <router-link> 標簽生成了一個鏈接,點擊該鏈接將跳轉到 /about 路由,

例如app.vue代碼顯示如何使用<router-link>組件創建鏈接:

<template>
  <div>
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
  </div>
</template>

在這個例子中,我們使用<router-link>組件創建兩個鏈接:一個指向路由'/',另一個指向路由'/about'

這是一個簡單的Vue3中基本路由配置的示例,可以通過定義更多的路由規則和使用更多的Vue Router功能來擴展它,

  • 使用 $router 物件

在組件中,可以通過 $router 物件訪問當前應用的路由實體,并使用其提供的方法跳轉到其他路由,例如:

export default {
  methods: {
    goToAbout() {
      this.$router.push('/about')
    }
  }
}

在這個例子中,使用 $router.push 方法跳轉到 /about 路由,

  • 使用 useRouter 方法

在 Vue.js 3.x 中,可以使用 useRouter 方法獲取路由實體,并使用其提供的方法跳轉到其他路由,

useRouter 是 Vue Router 4.x 中的一個新特性,用于在組件中訪問路由實體,在 Vue Router 4.x 中,可以使用 createRouter 方法創建路由實體,并通過 provide/injectapp.config.globalProperties 將其注入到 Vue 實體中,然后,在組件中,可以使用 useRouter 方法訪問注入的路由實體,

useRouter 方法是一個 Vue 3.x 中的 Composition API 方法,需要使用 import { useRouter } from 'vue-router' 引入,例如:

<template>
  <div>
    <h1>Home</h1>
    <button @click="handleClick">Go to About</button>
  </div>
</template>

<script>
import { defineComponent, useRouter } from 'vue'

export default defineComponent({
  setup() {
    const router = useRouter()

    const handleClick = () => {
    //push一個url地址 router.push(
'/about')
    //push一個物件
    //router.push(name:'about')
} return { handleClick } } }) </script>

在這個示例中,使用了 <template> 標簽包裹了模板,其中包括一個標題和一個按鈕,當按鈕被點擊時,呼叫 handleClick 方法,該方法使用 useRouter 方法獲取了當前組件所在的路由實體,然后調用 push 方法跳轉到路由 /about

需要注意的是,這個示例中使用了 Vue.js 3.x 的 Composition API,因此需要使用 import { defineComponent, useRouter } from 'vue' 引入組件和路由實體,并使用 defineComponent 定義組件,

特別注意:

push可以換成replace,但是意義不同,

push 方法用于在路由堆疊中添加新路由記錄,而 replace 方法用于替換當前路由記錄,因此可以使用 replace 方法進行路由跳轉,例如:

<template>
  <button @click="handleClick">Go to About</button>
</template>

<script>
import { defineComponent, useRouter } from 'vue'

export default defineComponent({
  setup() {
    const router = useRouter()

    const handleClick = () => {
      router.replace('/about')
    }

    return {
      handleClick
    }
  }
})
</script>

需要注意的是,使用 replace 方法進行路由跳轉會替換當前路由記錄,因此用戶無法通過瀏覽器的后退按鈕回傳到上一個路由,如果需要保留當前路由記錄并添加新的路由記錄,應該使用 push 方法,

vue3中的其他跳轉,例如:后退、前進

在 Vue.js 3.x 中,可以使用路由實體提供的 backforward 方法實作后退和前進的功能,具體來說,back 方法將用戶導航到前一個歷史記錄條目,而 forward 方法將用戶導航到下一個歷史記錄條目,例如:

// 使用 $router 物件
export default {
  methods: {
    goBack() {
      this.$router.back()
    },
    goForward() {
      this.$router.forward()
    }
  }
}

// 使用 useRouter 方法
import { defineComponent, useRouter } from 'vue'

export default defineComponent({
  setup() {
    const router = useRouter()

    const goBack = () => {
      router.back()
    }

    const goForward = () => {
      router.forward()
    }

    return {
      goBack,
      goForward
    }
  }
})

需要注意的是,使用 backforward 方法進行導航時,需要確保用戶在瀏覽器中已經瀏覽了足夠多的歷史記錄,否則這些方法可能會無法正常作業,另外,這些方法也可能會因為瀏覽器的不同而表現不同,

前進后退使用go實作

在 Vue.js 3.x 中,也可以使用路由實體提供的 go 方法實作前進和后退的功能,該方法接受一個整數引數 n,表示前進或后退的步數,當 n 為正數時,代表前進,而當 n 為負數時,代表后退,例如:

// 使用 $router 物件
export default {
  methods: {
    goBack() {
      this.$router.go(-1)
    },
    goForward() {
      this.$router.go(1)
    }
  }
}

// 使用 useRouter 方法
import { defineComponent, useRouter } from 'vue'

export default defineComponent({
  setup() {
    const router = useRouter()

    const goBack = () => {
      router.go(-1)
    }

    const goForward = () => {
      router.go(1)
    }

    return {
      goBack,
      goForward
    }
  }
})

需要注意的是,使用 go 方法進行導航時,需要確保當前路由在瀏覽器的歷史記錄中已經存在足夠多的條目,否則這些方法可能會無法正常作業,同時,這些方法也可能會因為瀏覽器的不同而表現不同,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/550463.html

標籤:其他

上一篇:vue全家桶進階之路33:Vue3 計算屬性computed

下一篇:比較幾種熱門Hybrid App前端框架

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more