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

Vue3?中路由Vue?Router?的使用實(shí)例詳解

 更新時(shí)間:2023年02月18日 11:42:13   作者:清風(fēng)?與我  
vue-router是vue.js官方給出的路由解決方案,能夠輕松的管理SPA項(xiàng)目中組件的切換,這篇文章主要介紹了Vue3?中路由Vue?Router?的使用,需要的朋友可以參考下

前言:

在編寫vue里的SPA(Single Page Application單頁面應(yīng)用)時(shí),我們始終繞不開路由的使用,vue-router4.0版里有一些重要更新,在這里分享給大家。

一、什么是 Vue Router ?

vue-router是vue.js官方給出的路由解決方案,能夠輕松的管理SPA項(xiàng)目中組件的切換

Vue Router 是 Vue.js 的官方路由。它與 Vue.js 核心深度集成,讓用 Vue.js 構(gòu)建單頁應(yīng)用變得輕而易舉。功能包括:

  • List item
  • 嵌套路由映射
  • 動(dòng)態(tài)路由選擇
  • 模塊化、基于組件的路由配置
  • 路由參數(shù)、查詢、通配符
  • 展示由 Vue.js 的過渡系統(tǒng)提供的過渡效果
  • 細(xì)致的導(dǎo)航控制
  • 自動(dòng)激活 CSS 類的鏈接
  • HTML5 history 模式或 hash 模式
  • 可定制的滾動(dòng)行為
  • URL 的正確編碼

二、路由的使用

1、路由的安裝

npm install vue-router@4

2、路由的模式

  • createWebHashHistory():Hash模式
  • 它在內(nèi)部傳遞的實(shí)際URL之前使用了一個(gè)哈希字符#,如 https://example.com/#/user/id
  • 由于這部分 URL 從未被發(fā)送到服務(wù)器,所以它不需要在服務(wù)器層面上進(jìn)行任何特殊處理
  • createWebHistory():history模式,推薦使用
  • 當(dāng)使用這種歷史模式時(shí),URL會(huì)看起來很“正常”,如 https://example.com/user/id
  • 由于我們的應(yīng)用是一個(gè)單頁的客戶端應(yīng)用,如果沒有適當(dāng)?shù)姆?wù)器配置,用戶在瀏覽器中直接訪問https://example.com/user/id,就會(huì)得到一個(gè)404錯(cuò)誤;要解決這個(gè)問題,你需要做的就是在你的服務(wù)器上添加一個(gè)簡單的回退路由,如果URL不匹配任何靜態(tài)資源,它應(yīng)提供與你的應(yīng)用程序中的index.html相同的頁面

3、創(chuàng)建路由模塊

  • 在項(xiàng)目中的src文件夾中創(chuàng)建一個(gè)router文件夾,在其中創(chuàng)建index.js模塊
  • 采用createRouter()創(chuàng)建路由,并暴露出去
  • 在main.js文件中初始化路由模塊app.use(router)
// router/index.js

import { createRouter, createWebHistory } from "vue-router";
import HomeView from '@/views/HomeView.vue'

// 創(chuàng)建路由規(guī)則
let routes = [
    {
        path: '/', // URL 地址
        name: 'home',  // 名稱
        component: HomeView  // 渲染該組件
    },
]

// 創(chuàng)建路由
const router = createRouter({
    // 使用 history 模式
    history: createWebHistory(),
    // 路由規(guī)則
    routes
})

// 將路由對(duì)象暴露出去
export default router
// main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'  // 引入路由模塊
let app = createApp(App)

app.use(router) // 初始化路由插件

app.mount('#app')

4、聲明路由鏈接和占位符

  • < router-link>:路由鏈接,to屬性則為點(diǎn)擊此元素,需要切換的路由地址
  • < router-view>:路由占位符,路由切換的視圖展示的位置
<template>
	<!--   路由鏈接,點(diǎn)擊是路由地址會(huì)切換到屬性 to 的地方   -->
    <router-link to="/">首頁</router-link>
    |
    <router-link to="/blog">博客</router-link>
    <hr>
	<!--   路由試圖,路由切換組件的地方   -->
    <router-view/>
</template>

三、路由的重定向和別名

在路由規(guī)則中,可采用redirect來重定向另一個(gè)地址

// 路徑寫法
const routes = [{ path: '/home', redirect: '/' }]
// 命名寫法
const routes = [{ path: '/home', redirect: { name: 'home' } }]
]

別名表示訪問url時(shí)自由命名,不受約束,router會(huì)自動(dòng)進(jìn)行別名匹配,就像我們設(shè)置/的別名為/home,相當(dāng)于訪問 /

// alias是別名的key
const routes = [{ path: '/', component: HomeView, alias: '/home' }]

四、嵌套路由

如果在路由視圖中展示的組件中包含自己的路由占位符,則此處會(huì)用到嵌套路由
如圖所示:點(diǎn)擊關(guān)于鏈接,則會(huì)顯示About組件,在其組件中又包含了路由鏈接和路由占位符

嵌套路由規(guī)則

  • 在某一個(gè)路由規(guī)則中采用children來聲明嵌套路由的規(guī)則
  • 嵌套路由規(guī)則中的path不能以/開頭,訪問需使用/father/son的形式
// router/index.js

{
    path: '/father',
    name: 'father',
    component:  () => import('@/views/father.vue'),
    // 嵌套路由
    children: [
        {
            path: 'son', // path 前面不要加 /
            name: 'son',
            component: () => import('@/views/son.vue')
        },
    ]
}


// father.vue 頁面
<template>  
    <div class="school">
        我是 father 頁面:
        <router-link to="/father/son">子頁面</router-link>
        <hr>
		<!-- 該組件中自己的路由視圖 -->
        <router-view />
    </div>
</template>

五、聲明式和編程式導(dǎo)航

聲明式編程式描述
< router-link :to=“…”>router.push(…)會(huì)向history棧添加一個(gè)新的記錄,所以,當(dāng)用戶點(diǎn)擊瀏覽器后退按鈕時(shí),會(huì)回到之前的URL

1、聲明式導(dǎo)航

很多時(shí)候,我們需要將給定匹配模式的路由映射到同一個(gè)組件,例如:想渲染不同博客的內(nèi)容,其>實(shí)只是渲染到同一個(gè)組件上,只是博客的編號(hào)不同而已在Vue Router中,可以在路徑中使用一個(gè)動(dòng)態(tài)字段來實(shí)現(xiàn),我們稱之為“路徑參數(shù)” ,語法如:path: ‘/url/:param’在展示的組件中訪問路徑參數(shù)
3.1. 在選項(xiàng)式 APIJS中采用this. r o u t e . p a r a m s 來訪問,試圖模板上采用 route.params來訪問,試圖模板上采用 route.params來訪問,試圖模板上采用route.params來訪問
3.2. 在組合式 API 中,需要import { useRoute } from ‘vue-router’,JS和視圖模板上通過useRoute().params來訪問
3.3. 還可以通過在路由規(guī)則上添加props: true,將路由參數(shù)傳遞給組件的props中

// router/index.js
{
    path: '/father',
    name: 'father',
    component:  () => import('@/views/father.vue'),
    // 嵌套路由
    children: [
        {
            path: 'son/:id', // path 前面不要加 / (路徑傳參)
            name: 'son',
            component: () => import('@/views/son.vue'),
            props: true  // 將路徑參數(shù)傳遞到展示組件的 props 中
        },
    ]
}


// father.vue
<template>  
    <div class="school">
        我是 father 頁面:
        <router-link to="/father/son">子頁面</router-link>
        <hr>
		<!-- 該組件中自己的路由視圖 -->
        <router-view />
    </div>
</template>


// son.vue 選項(xiàng)式
<script>
export default {
    // 通過 props 來接收路徑參數(shù)
    props: { id: String },
    methods: {
        showRouteParams() {
            // 通過 `this.$route.params` 獲取路徑參數(shù)
            console.log(this.$route.params)
          	// 取出指定的路徑參數(shù)
            console.log(this.$route.params.id)
            // 輸出 props 中得到的路徑參數(shù)
            console.log("輸出 props 中得到的路徑參數(shù):" + this.id)
        }
    }
}
</script>

<template>
    <div class="math">
        我是 BlogContent 頁面
        <ul>
            <li>通過 `this.$route.params` 獲取路徑參數(shù) -- {{ $route.params }}</li>
            <li>取出指定的路徑參數(shù) -- {{ $route.params.id }}</li>
            <li>輸出 props 中得到的路徑參數(shù) id -- {{ id }}</li>
        </ul>
        <button @click="showRouteParams">在 JS 中訪問路徑參數(shù)</button>
    </div>
</template>


// son.vue 組合式
<script setup>
import { useRoute } from 'vue-router'

// 通過 props 來接收路徑參數(shù)
let propsData = defineProps({ id: String })

// 獲取路由跳轉(zhuǎn)對(duì)象
let route = useRoute()

function showRouteParams() {
    console.log(route.params) // 通過 `route` 獲取路徑參數(shù)
    console.log(route.params.id) // 取出指定的路徑參數(shù)
    console.log("輸出 props 中得到的路徑參數(shù):" + propsData.id)
}
</script>

<template>
    <div class="math">
        我是 BlogContent 頁面
        <ul>
            <li>通過 `route` 獲取路徑參數(shù) -- {{ route.params }}</li>
            <li>取出指定的路徑參數(shù):{{ route.params.id }}</li>
            <li>輸出 props 中得到的路徑參數(shù) id -- {{ id }}</li>
        </ul>
        <button @click="showRouteParams">在 JS 中訪問路徑參數(shù)</button>
    </div>
</template>

2、編程式導(dǎo)航

提示:

編程式的router.push(…)的語法

其的參數(shù)可以是一個(gè)字符串路徑,或者一個(gè)描述地址的對(duì)象如果參數(shù)是描述地址的對(duì)象的話,其對(duì)象中path和params不能同時(shí)使用
// 編程式導(dǎo)航
const username = 'eduardo'

// 我們可以手動(dòng)建立 url,但我們必須自己處理編碼
router.push(`/user/${username}`) // -> /user/eduardo

// 同樣
router.push({ path: `/user/${username}` }) // -> /user/eduardo

// 如果可能的話,使用 `name` 和 `params` 從自動(dòng) URL 編碼中獲益(params名必須和 router規(guī)則中的名一致)
router.push({ name: 'user', params: { username } }) // -> /user/eduardo

// `params` 不能與 `path` 一起使用
router.push({ path: '/user', params: { username } }) // -> /user

3、替換當(dāng)前位置

聲明式編程式描述
< router-link :to=“…” replace>router.replace(…)它的作用類似于router.push(…),唯一不同的是,它在導(dǎo)航時(shí)不會(huì)向history添加新記錄,正如它的名字所暗示的那樣,它取代了當(dāng)前的條目
提示:也可以直接在傳遞給router.push的routeLocation中增加一個(gè)屬性replace: true
router.push({ path: '/home', replace: true })

// 相當(dāng)于
router.replace({ path: '/home' })

4、路由歷史

router.go(n) 該方法采用一個(gè)整數(shù)作為參數(shù),表示在歷史堆棧中前進(jìn)或后退多少步,類似于 window.history.go(n)

// 向前移動(dòng)一條記錄,與 router.forward() 相同
router.go(1)

// 返回一條記錄,與 router.back() 相同
router.go(-1)

// 前進(jìn) 3 條記錄
router.go(3)

// 如果沒有那么多記錄,靜默失敗
router.go(-100)
router.go(100)

總結(jié):

到此這篇關(guān)于Vue3 中路由Vue Router 的使用的文章就介紹到這了,更多相關(guān)Vue3 路由Vue Router使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • element中datepicker日期選擇器選擇周一到周日并實(shí)現(xiàn)上一周和下一周的方法

    element中datepicker日期選擇器選擇周一到周日并實(shí)現(xiàn)上一周和下一周的方法

    最近項(xiàng)目中需要用到日期選擇器,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于element中datepicker日期選擇器選擇周一到周日并實(shí)現(xiàn)上一周和下一周的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • vue 全局環(huán)境切換問題

    vue 全局環(huán)境切換問題

    小編在開發(fā)使經(jīng)常會(huì)碰到全局切換問題,今天小編給大家?guī)硪黄坛探o大家介紹vue 全局環(huán)境切換問題,感興趣的朋友一起看看吧
    2019-10-10
  • vue.js入門教程之綁定class和style樣式

    vue.js入門教程之綁定class和style樣式

    小編之前介紹了通過vue.js計(jì)算屬性,不知道大家都學(xué)會(huì)了嗎。那這篇文章中我們將一起學(xué)習(xí)vue.js實(shí)現(xiàn)綁定class和style樣式,有需要的朋友們可以參考借鑒。
    2016-09-09
  • Vue3?Watch踩坑實(shí)戰(zhàn)之watch監(jiān)聽無效

    Vue3?Watch踩坑實(shí)戰(zhàn)之watch監(jiān)聽無效

    Vue.js中的watch選項(xiàng)用于監(jiān)聽Vue實(shí)例上某個(gè)特定的數(shù)據(jù)變化,下面這篇文章主要給大家介紹了關(guān)于Vue3?Watch踩坑實(shí)戰(zhàn)之watch監(jiān)聽無效的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • vue3簡易實(shí)現(xiàn)proxy代理實(shí)例詳解

    vue3簡易實(shí)現(xiàn)proxy代理實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • element-ui使用el-date-picker日期組件常見場景分析

    element-ui使用el-date-picker日期組件常見場景分析

    最近一直在使用 element-ui中的日期組件,所以想對(duì)日期組件常用的做一個(gè)簡單的總結(jié),對(duì)element-ui el-date-picker日期組件使用場景分析感興趣的朋友一起看看吧
    2024-05-05
  • vue組件實(shí)現(xiàn)彈出框點(diǎn)擊顯示隱藏效果

    vue組件實(shí)現(xiàn)彈出框點(diǎn)擊顯示隱藏效果

    這篇文章主要為大家詳細(xì)介紹了vue組件實(shí)現(xiàn)彈出框點(diǎn)擊顯示隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 一文詳解Vue中可重用組件的3個(gè)主要問題

    一文詳解Vue中可重用組件的3個(gè)主要問題

    當(dāng)我們談?wù)摶蛴懻撛?Vue?中創(chuàng)建用戶界面組件時(shí),經(jīng)常會(huì)提到可重用性,在?Vue?中創(chuàng)建真正的可重用組件可能很棘手,在本文中,我將探討可重用組件的概念、應(yīng)用這些組件時(shí)面臨的問題,以及為什么必須盡可能克服這些問題,需要的朋友可以參考下
    2023-10-10
  • Vue單頁面應(yīng)用保證F5強(qiáng)刷不清空數(shù)據(jù)的解決方案

    Vue單頁面應(yīng)用保證F5強(qiáng)刷不清空數(shù)據(jù)的解決方案

    最近小編遇到這樣的問題當(dāng)vue單頁面按F5強(qiáng)刷,數(shù)據(jù)就恢復(fù)初始了,這怎么辦呢?下面小編給大家?guī)砹薞ue單頁面應(yīng)用保證F5強(qiáng)刷不清空數(shù)據(jù)的解決方案,感興趣的朋友一起看看吧
    2018-01-01
  • vue?table表格中如何控制下拉框的顯示隱藏

    vue?table表格中如何控制下拉框的顯示隱藏

    這篇文章主要介紹了vue?table表格中如何控制下拉框的顯示隱藏問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論

河曲县| 内丘县| 罗江县| 定远县| 军事| 三台县| 鹤峰县| 吉木乃县| 壤塘县| 东乌珠穆沁旗| 禹州市| 和田市| 托里县| 抚宁县| 尼勒克县| 建昌县| 上杭县| 瑞安市| 长兴县| 娄烦县| 藁城市| 丘北县| 石景山区| 通渭县| 理塘县| 濮阳县| 延寿县| 遂川县| 明溪县| 大余县| 门源| 苍梧县| 珲春市| 垣曲县| 页游| 兴安县| 嘉荫县| 庄浪县| 荆门市| 托克托县| 峡江县|