在前端路由中,尤其是在 Vue.js 這樣的框架中,
meta
?和?matched
?是兩個常見的概念,它們提供了關于路由的額外信息和上下文
1. meta
一個可以附加到 Vue Router 路由定義上的自定義字段
它通常用于存儲一些與路由相關的元數據或信息,這些信息不直接參與路由的匹配,但可以在路由的導航守衛(如?beforeEach
)或組件內部使用
例如,可以使用?meta
?來存儲一個路由是否需要身份驗證的信息:
const routes = [ { path: '/user', component: User, meta: { requiresAuth: true } }, // ...其他路由
]
然后,在路由的導航守衛中,可以檢查這個?meta
?字段來決定是否允許用戶訪問該路由:
router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) { // 檢查用戶是否已登錄 // 如果未登錄,則重定向到登錄頁面 } else { next(); // 確保一定要調用 next() }
})
2. matched
matched
?是一個數組,包含了當前路由匹配到的所有路由記錄(route records)
當路由被匹配時,Vue Router 會遍歷路由配置數組,并找到所有匹配的路由記錄。這些記錄按照定義順序從父路由到子路由進行排序。
每個路由記錄都是一個對象,包含了路由的許多信息,如?path
、components
、meta
?等。因此,可以通過?matched
?數組訪問到這些路由記錄的信息。
假設有如下的路由配置:
const routes = [ { path: '/user/:id', component: User, children: [ { path: 'profile', component: UserProfile }, { path: 'posts', component: UserPosts } ] }
]
當用戶訪問?/user/123/profile
?時,matched
?數組將包含兩個路由記錄:一個是?/user/:id
?的父路由記錄,另一個是?/user/:id/profile
?的子路由記錄。可以通過?to.matched
?在導航守衛或組件內部訪問這些路由記錄
總之,
meta
?和?matched
?提供了關于路由的額外信息和上下文,能夠更靈活地控制路由的行為和組件的渲染