Vue Routing
up:: Vue
( Nuxt ⚐ has some built-in functions that make this even more convinient. )
Router configuration
import { createRouter, createWebHistory } from 'vue' ;
import TeamsList from '...' ;
const router = createRouter ({
history: createWebHistory (),
routes: [
{ path: "/teams" , component: TeamsList }
]
});
const app = createApp (App);
app. use (router)
Dynamic routes
const router = createRouter ({
routes: [
{ path: "/teams/:teamId" , // prefixed with colon
component: TeamMembers }
]
});
Get access in the created
Vue Instance Lifecycle :
created () {
// this.$route.path // see the whole path
// this.$route.params // get the parameters
this .$route.params.teamId // access a specific parameter
// search for a fitting id
const selectedTeam = this .teams. find (( team ) => team.id === teamId)
}
Using props
When navigating from a dynamic route to another dynamic route, the component doesn’t get reloaded. That is because we call the route in created
. Vue doesn’t create and destroy the component, it is cached.
const router = createRouter ({
routes: [
{ path: "/teams/:teamId" , // prefixed with colon
component: TeamMembers,
prop: true }
]
});
This code above is not completed, but it starts something like this.
router-view
Let the template know where to render it:
< main >
<router-view></router-view>
</ main >
router-link
Navigate (vue’s replacement of a href
essentially):
< router-link to = "/teams" >Teams</ router-link >
Styling
router-link-active
: Applied to any item that fits part of the url.
router-link-exact-active
: Applied when the whole url matches the whole path.
Navigate programmatically
(through Vue Methods ) (Nuxt does this with Nuxt navigateTo )
methods : {
navigateToOtherSite () {
this .$router. push ( '/teams' ); // takes us to '/teams'
this .$router. back (); // emulates the browser's back button
this .$router. forward (); // emulates the browser's forward button
}
}
Redirects
const router = createRouter ({
routes: [
{ path: "/" , redirect: '/teams' }
]
});
You can also add alias
on the other route. What is important to know is that the ** then.
Catch-all routes
const router = createRouter ({
routes: [
// this one needs to come last, otherwise it overwrites everything else
{ path: "/:notFound(.*)" , component: 'NotFound' }
]
});
Sublinks
You can also add a children
parameter to each list. That makes it a sub-path.
Then you need to add an extra router-view
in the parent component.
Query parameters
this.$route.query