VueRouter的使用技巧和最佳實踐

Vue.js 是一款輕量級MVVM框架,可以幫助我們非常方便的構建單頁應用,而 Vue Router 可以幫助我們實現單頁應用的路由功能。

一、路由基礎

1、創建Router實例

在使用Vue Router 之前,我們需要先創建一個Router實例。在main.js文件中引入Vue和Vue Router,並使用use()方法安裝插件

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
    routes: [...] // 路由配置
})

代碼解釋:

  • 首先我們需要引入Vue和VueRouter
  • 然後調用Vue.use()方法安裝VueRouter插件
  • 創建一個VueRouter實例,並傳遞routes參數,routes是一個路由配置數組,包含多個路由對象配置
  • 在最後導出VueRouter實例,以便在其他地方使用

2、路由配置

在創建Router實例的時候,我們需要配置routes參數。routes是一個路由配置數組,包含多個路由對象配置

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

代碼解釋:

  • 我們定義了2個路由對象,即 /home 和 /about
  • 每個路由對象包含3個屬性:path、name和component
  • path代表路由路徑,name代表路由名稱,component代表路由要渲染的組件

3、路由嵌套

在一些大型的應用中,我們需要使用到路由嵌套,這樣能夠更好的管理我們的路由配置。Router 嵌套還可以實現多人協同作業,路由規則按組或模塊分開,不同的人維護不同的文件,避免人為衝突。

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    children: [
      {
        path: 'profile',
        name: 'Profile',
        component: Profile
      },
      {
        path: 'dashboard',
        name: 'Dashboard',
        component: Dashboard
      }
    ]
  }
]

代碼解釋:

  • 在主路由下,我們添加了children數組,包含兩個子路由
  • 每個子路由不再以/開頭,而是以父路由的路徑/作為前綴,同時子路由的component也是自己的組件。
  • 比如在這個例子中,子路由的路徑就是 /profile 和 /dashboard ,對應的組件是 Profile 和 Dashboard

二、導航

1、跳轉到路由

我們可以通過 router-link 標籤在 Vue 模板中聲明一個鏈接,使用戶跳轉到不同的路由。Vue Router 根據 link 的 href 屬性自動激活對應的路由,Vue 會自動阻止默認事件的發生,所以不需要使用 v-on:click.prevent

<router-link to="/home">Home</router-link>

代碼解釋:

  • router-link 是Vue Router 提供的組件,to屬性是路由路徑,對應的是上文配置的 path 屬性

2、編程式導航

我們也可以在代碼中進行路由導航,比如跳轉到另外一個路由,並且路徑可以動態設置。這種方式叫做編程式導航

router.push('/home')

代碼解釋:

  • 使用 router.push 進行編程式導航,以 /home 為例

3、參數傳遞

在 Vue Router 中,可以通過在路由路徑中加入參數來傳遞參數。這些參數可以是必須的,也可以是可選的。在路由配置項中,可以通過:來指定參數名,如 /user/:id 中的 :id

const routes = [
  {
    path: '/user/:id',
    name: 'User',
    component: User
  }
]

代碼解釋:

  • 在路由配置中,我們使用 /user/:id 定義了一個路由,其中 :id 表示參數
  • 在路由鏈接中,可以使用 $route.params.id 獲取傳遞的參數
  • 在編程式導航中,可以使用 params 屬性傳遞參數
// links
<router-link :to="'/user/' + user.id">{{ user.name }}</router-link>

// programmatic navigation
this.$router.push({ name: 'User', params: { id: this.userId } })

三、路由鉤子

路由鉤子就是在路由導航過程中的一些鉤子函數,可以控制路由跳轉、路由數據變化等方面的行為

1、全局前置守衛

全局前置守衛是在路由導航之前調用的,可以用於身份驗證,日誌記錄等。多個全局前置守衛會按照註冊順序依次執行

router.beforeEach((to, from, next) => {
  // to 和 from 都是路由對象
  // to 是導航到的路由對象
  // from 是導航來源的路由對象
  // next 是一個函數,調用該函數,才會執行導航操作
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // 判斷是否需要身份驗證,未登錄則跳轉到登錄頁
    if (!auth.loggedIn()) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next() // 不需要身份驗證
  }
})

代碼解釋:

  • 在全局前置守衛中,我們可以根據 to 和 from 來判斷是否需要身份驗證
  • 如果需要身份驗證,且未登錄,則跳轉到登錄頁面,可以使用 next({path: ‘/login’}) 轉到登錄頁面
  • 如果不需要身份驗證,直接調用 next()

2、全局後置鉤子

全局後置鉤子是在路由導航之後調用的,無法取消導航行為,也無法控制路由跳轉。只能接收到路由導航的成功或失敗。

router.afterEach((to, from) => {
  // to 和 from 都是路由對象
  // 這裡可以添加一些日誌記錄等操作
})

3、組件內路由鉤子

除了全局路由鉤子,Vue Router 還提供了多個組件內的路由鉤子函數,它們是定義在組件內部的方法,可以在特定組件內使用

export default {
  beforeRouteEnter (to, from, next) {
    // 在路由進入該組件前調用
    // 無法訪問組件實例 this
    next() // 通過調用next()執行路由操作
  },

  beforeRouteUpdate (to, from, next) {
    // 在當前組件重新渲染時調用
    // 可以訪問組件實例 this
    next()
  },

  beforeRouteLeave (to, from, next) {
    // 在路由離開該組件時調用
    // 可以訪問組件實例 this
    next()
  }
}

四、代碼拆分

在一個單頁應用中,隨着應用變得越來越大,JS 文件也會越來越大,這時候我們可以將不同的路由拆分成不同的代碼塊,僅在需要的時候再加載對應的組件。

const Home = () => import('./views/Home.vue')
const About = () => import('./views/About.vue')

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

代碼解釋:

  • 在路由組件中使用動態導入語法,即使用 () => import(…) 的方式導入組件,在需要的時候才會加載。

結語

以上是關於VueRouter使用技巧和最佳實踐的詳細闡述,包括路由基礎、導航、路由鉤子、代碼拆分等方面。通過靈活使用VueRouter,能夠讓我們更好的構建單頁應用。

原創文章,作者:JIQH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149358.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JIQH的頭像JIQH
上一篇 2024-11-04 17:51
下一篇 2024-11-04 17:51

相關推薦

  • Vue ref和v-for的使用技巧

    本文將從多個方面對Vue中的ref和v-for進行詳細闡述,以幫助讀者更好地掌握相關知識。 一、ref的使用 在Vue中,ref用於給某個元素或組件註冊引用信息,可以在其他方法中通…

    編程 2025-04-25
  • Unity Normalized的使用技巧

    Unity是一款非常流行的遊戲引擎,它可以用來製作各種不同類型的遊戲。其中,Normalized這個概念在Unity中是非常重要的,它對於遊戲的運動學、物理模擬等方面都有很大的影響…

    編程 2025-04-24
  • 安裝IntelliJ IDEA教程及使用技巧

    一、下載安裝 IntelliJ IDEA是一款功能強大的Java集成開發環境。下載安裝前,需要確認所下載版本適合你的操作系統。下載完成後,簡單的一步步安裝即可。 1. 下載 在id…

    編程 2025-04-24
  • jQuery創建節點的使用技巧

    一、高效創建節點的基礎知識 jQuery是建立在JavaScript之上的一個強大而靈活的庫,它通過一些簡單的API,簡化了JavaScript DOM操作的繁瑣和複雜度。通過使用…

    編程 2025-04-22
  • 深入了解rebar:從框架搭建到使用技巧

    一、rebar是什麼 rebar是一個erlang程序的構建工具,它使用erlang的make系統對erlang的應用程序進行編譯和管理。與makefile相比,rebar使用簡單…

    編程 2025-02-01
  • 使用技巧|如何提高WordPress後台頁面訪問量

    WordPress是一個世界範圍內廣泛使用的網站創建工具。使用WordPress管理博客和網站是常見的任務之一,WordPress後台是管理博客和網站的一個關鍵頁面。如何提高Wor…

    編程 2025-02-01
  • 啟動台快捷鍵的使用技巧

    啟動台快捷鍵是操作系統中的一個非常重要的快捷鍵,通過啟動台快捷鍵可以快速啟動應用程序。本文將介紹一些有關啟動台快捷鍵的使用技巧,幫助你更加高效地使用它。 一、創建啟動台快捷鍵 在 …

    編程 2025-01-21
  • Python中的map及get方法使用技巧

    一、map函數 在Python中,map()函數是一個非常強大且有用的函數,它可以將一個函數作用於一個序列中的所有元素,並將結果作為新的序列返回。 例如,如果你有一個數值列表,並希…

    編程 2025-01-16
  • Google高級搜索的使用技巧

    一、搜索結果的過濾 Google高級搜索提供了許多過濾搜索結果的選項,讓用戶可以更加精確地找到自己需要的信息。其中常用的過濾選項有: 語言:用戶可根據自己的語言需求選擇搜索結果的語…

    編程 2025-01-14
  • Linux運維工程師必備:Shell循環語句使用技巧

    Shell腳本編程是Linux運維工程師必備的一項技能。Shell提供了許多類型的循環,如for、while、until等,可以幫助我們在處理大批量任務時減少代碼量,提高工作效率。…

    編程 2025-01-13

發表回復

登錄後才能評論