一、為什麼需要子路由系統?
隨著單頁面應用的普及,前端路由管理越來越重要。在一個大型的應用中,如果只是使用一個路由來管理所有的頁面,會導致代碼量龐大、可讀性差、難以維護等問題。而子路由系統正是為了解決這些問題而生的。
使用子路由系統,我們可以將應用拆分成多個模塊,每個模塊有自己的路由管理。這樣,不僅可以提高代碼的可讀性和可維護性,還可以提高代碼的靈活性和復用性,降低開發成本。
二、如何實現子路由系統?
1. 基本思路
實現子路由系統的基本思路是將父路由與子路由結合起來,父路由用於渲染各個子路由,子路由則用於管理具體的頁面展示。在代碼實現上,可以採用如下方式:
// 父路由
const parentRoute = new Router({
routes: [
{
path: '/user',
component: UserLayout, // 渲染用戶相關頁面
children: [
{
path: '',
component: UserDashboard // 渲染用戶信息頁面
},
{
path: 'profile',
component: UserProfile // 渲染用戶資料頁面
},
{
path: 'setting',
component: UserSetting // 渲染用戶設置頁面
}
]
}
]
})
// 子路由
const childRoute = new Router({
routes: [
{
path: '',
component: UserDashboard // 渲染用戶信息頁面
},
{
path: 'profile',
component: UserProfile // 渲染用戶資料頁面
},
{
path: 'setting',
component: UserSetting // 渲染用戶設置頁面
}
]
})
// 註冊路由
Vue.use(parentRoute)
Vue.use(childRoute)
這段代碼中,我們定義了一個父路由和一個子路由。父路由用於渲染用戶相關頁面,子路由用於管理具體的頁面展示。註冊路由時,我們同時將父路由和子路由都註冊到了Vue實例中。
2. 路由傳參
在實際開發中,我們往往需要通過路由傳遞參數來完成一些操作。子路由系統同樣支持路由傳參,我們可以通過路由的query或params屬性來實現。例如:
// 父路由
const parentRoute = new Router({
routes: [
{
path: '/user/:id',
component: UserLayout, // 渲染用戶相關頁面
children: [
{
path: '',
component: UserDashboard // 渲染用戶信息頁面
},
{
path: 'profile',
component: UserProfile // 渲染用戶資料頁面
},
{
path: 'setting',
component: UserSetting // 渲染用戶設置頁面
}
]
}
]
})
// 子路由
const childRoute = new Router({
routes: [
{
path: '',
component: UserDashboard, // 渲染用戶信息頁面
meta: {
requireAuth: true
}
},
{
path: 'profile',
component: UserProfile, // 渲染用戶資料頁面
props: true
},
{
path: 'setting',
component: UserSetting, // 渲染用戶設置頁面
props: {
default: {
id: '123'
}
}
}
]
})
// 註冊路由
Vue.use(parentRoute)
Vue.use(childRoute)
在這個例子中,我們為父路由添加了一個id參數,用於標識當前用戶的id。在子路由中,我們分別針對不同的頁面,使用了不同的路由傳參方式。其中,UserDashboard頁面沒有使用任何參數,而UserProfile頁面使用了props屬性接收參數。UserSetting頁面中,我們使用了默認props的方式傳遞參數。
三、子路由系統的優化
1. 懶載入
使用子路由系統時,我們很可能需要載入大量的組件。為了提高應用的性能,我們可以使用懶載入的方式,將組件按需載入。在Vue中,我們可以使用動態import語法來實現:
{
path: 'profile',
component: () => import('./views/UserProfile.vue')
}
這樣,UserProifle組件就會在需要渲染的時候才被載入進來,可以有效降低應用的首屏載入時間。
2. 路由守衛
在子路由系統中,我們經常需要進行一些許可權控制。這時候,我們可以使用路由守衛來完成操作。在Vue中,路由守衛包括三種類型:全局前置守衛、全局後置守衛、組件內守衛。例如:
// 全局前置守衛
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth) {
// 需要登錄才能訪問
if (store.getters.isLogged) {
// 已登錄
next()
} else {
// 未登錄,跳轉至登錄頁面
next('/login')
}
} else {
// 不需要登錄
next()
}
})
// 組件內守衛
export default {
data() {
return {
user: {}
}
},
beforeRouteEnter(to, from, next) {
// 在進入該頁面之前獲取用戶信息
axios.get('/user').then(res => {
next(vm => {
vm.user = res.data
})
})
}
}
通過路由守衛,我們可以實現各種複雜的功能,如頁面鑒權、數據預載入等。
原創文章,作者:OZVKN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329943.html
微信掃一掃
支付寶掃一掃