項目代碼同步至碼雲 weiz-vue3-template Vue Router 是 Vue.js 的官方路由。它與 Vue.js 核心深度集成,讓用 Vue.js 構建單頁應用變得輕而易舉。 1. 安裝 npm i vue-router@4 2. 集成 1. 新建兩頁面進行示例 在src/view下 ...
項目代碼同步至碼雲 weiz-vue3-template
Vue Router 是 Vue.js 的官方路由。它與 Vue.js 核心深度集成,讓用 Vue.js 構建單頁應用變得輕而易舉。
1. 安裝
npm i vue-router@4
2. 集成
1. 新建兩頁面進行示例
在src/view
下新建home.vue
和login.vue
,內容如下:
<script setup lang="ts">
defineOptions({
name: 'V-home'
})
</script>
<template>
<div>home page</div>
</template>
<style lang="scss" scoped></style>
login.vue
里修改下對應name即可
2. src
下新建router
文件夾
index.ts
作為路由入口,static.ts
作為靜態路由,modules
內還可以放入其他類型路由,整體目錄結構如下:
src
|
+---router
| | index.ts
| +---modules
| | static.ts
static.ts
內容如下:
const routes = [
{
path: '/',
component: () => import('@/views/home.vue')
},
{
path: '/login',
component: () => import('@/views/login.vue') //路由懶載入
}
]
export default routes
index.ts
內容如下:
import { Router, createRouter, createWebHistory } from 'vue-router'
/** 自動導入 src/router/modules 下的靜態路由
* import.meta.glob使用說明:https://cn.vitejs.dev/guide/features#glob-import
*/
const modules: Record<string, any> = import.meta.glob(['./modules/**/*.ts'], {
eager: true
})
/** 初始路由 **/
const routes: any[] = []
Object.keys(modules).forEach((key) => {
const module = modules[key].default
if (Array.isArray(module)) {
for (const item of module) {
routes.push(item)
}
} else {
routes.push(module)
}
})
/**
* 創建路由實例
* createRouter選項有:https://router.vuejs.org/zh/api/interfaces/RouterOptions.html
* hash模式使用createWebHashHistory(): https://router.vuejs.org/zh/api/#Functions-createWebHashHistory
*/
export const router: Router = createRouter({
history: createWebHistory(),
routes,
strict: true,
scrollBehavior(_to, from, savedPosition) {
return new Promise((resolve) => {
if (savedPosition) {
return savedPosition
} else {
if (from.meta.saveSrollTop) {
const top: number = document.documentElement.scrollTop || document.body.scrollTop
resolve({ left: 0, top })
}
}
})
}
})
/**
* 路由守衛
* https://router.vuejs.org/zh/guide/advanced/navigation-guards.html
*/
router.beforeEach((to, _from, next) => {
// isAuthenticated 代表你的鑒權
const isAuthenticated = true
if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
else next()
})
export default router
3. 修改App.vue
承載路由,並增加導航
<script setup lang="ts"></script>
<template>
<router-link to="/"> 去首頁 </router-link> 丨 <router-link to="/login"> 去登錄 </router-link>
<router-view />
</template>
<style scoped></style>
4. 修改main.ts
使用路由
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from '@/router/index'
createApp(App).use(router).mount('#app')
3. 預覽
其他用法,包括傳參、重定向、動態路由、過渡動效等,請參考官方文檔。
https://www.cnblogs.com/weizwz/p/17866084.html
本博客所有文章除特別聲明外,均採用 「署名-非商業性使用-相同方式共用 4.0 國際」 許可協議,轉載請註明出處!
內容粗淺,如有錯誤,歡迎大佬批評指正