Loading...
Loading...
ALWAYS use when writing code that imports "vue-router", "vue-router/vite", "vue-router/auto-routes", or "vue-router/experimental". Consult for debugging, best practices, or modifying vue-router, vue router, router, file-based routing, typed routes, data loaders.
npx skill4agent add skilld-dev/vue-ecosystem-skills vue-router-skilldvue-router@5.3.1vue-router@5.3.1"type": "module"vue ^3.5.34 || ^4.0.0vite ^7.3.0 || ^8.0.0pinia ^3.0.4 || ^4.0.2@pinia/colada >=0.21.2| Import | Use for |
|---|---|
| |
| Vite plugin, file-based routing (package.json:104) |
| same plugin for other bundlers (dist/unplugin/) |
| |
| generated |
| generated |
| data loaders, |
| |
| Volar plugins: |
vue-router/autovue-router/experimentalimport { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/', component: () => import('./pages/Home.vue') },
{ path: '/users/:id', component: () => import('./pages/User.vue'), props: true },
],
})
app.use(router)useRoute()useRouter()vue-router<RouterLink to="..."><RouterView>app.use(router)// vite.config.ts
import VueRouter from 'vue-router/vite'
import Vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [VueRouter(), Vue()], // Vue plugin MUST come after VueRouter
})import { createRouter, createWebHistory } from 'vue-router'
import { routes, handleHotUpdate } from 'vue-router/auto-routes'
const router = createRouter({ history: createWebHistory(), routes })
if (import.meta.hot) handleHotUpdate(router)src/pagestyped-router.d.tstsconfig.jsoninclude"moduleResolution": "Bundler"next()nextrouter.beforeEach(to => {
if (to.meta.requiresAuth && !isAuthenticated) return { name: 'login' }
// return nothing, true, false, or a route location
})reroute(to)new NavigationResult(to)router.currentRouteShallowRef<RouteLocationNormalizedLoaded>router.currentRoute.valuerouter.onReady()await router.isReady()scrollBehavior{ top, left }xylefttopconst failure = await router.push(...)isNavigationFailure(failure, NavigationFailureType.aborted)route.metato.meta.requiresAuthto.matchedmetaRouteMetarouter.beforeResolvebeforeEachinject()props: trueprops: route => ({ ... })() => route.params.idroutedeclare module 'vue-router' {
interface TypesConfig {
RouteNamedMap: RouteNamedMap
}
}push('/users/:id', { params: { id: 42 } })useRoute()vue-router/volar/sfc-typed-routerintboolsrc/params/definePage({ params: { query: { page: { parser: 'int', default: 1 } } } })// src/pages/users/[id].vue
import { defineBasicLoader } from 'vue-router/experimental'
import { reroute } from 'vue-router/experimental'
export const useUserData = defineBasicLoader(async (to) => {
if (!to.params.id) reroute('/') // reroute throws: stops the loader immediately
return fetchUser(to.params.id)
})DataLoaderPluginapp.use(DataLoaderPlugin, { router })defineBasicLoader(loader, { lazy: true })errorrouter.onErrorRouteNamedMaptyped-router.d.tsincludeexcludedefinePageparams.pathdefineParamParserRawTypesConfigRouterhistory.scrollRestorationdefinePage()EditableTreeNode.namefalseisActiveunplugin-vue-routerdefinePage<route>extendRouteTypesConfigexperimental_createRouterdefineBasicLoaderdefineColadaLoaderreroute