Check out my books on Amazon at https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62
Subscribe to my email list now at http://jauyeung.net/subscribe/
Vue Router 4 is in beta and it’s subject to change.
To build a single page app easily, we got to add routing so that URLs will be mapped to components that are rendered.
In this article, we’ll look at how to use Vue Router 4 with Vue 3.
Alias
A redirect means that when a user visits /a
, then the URL is replaced by /b
and matched as /b
.
An alias of /a
as /b
means that when the user visits /b
, the URL stays as /b
, but it’ll be matched as if the user is visiting /a
.
For example, we can write:
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://unpkg.com/vue@next"></script>
<script src="https://unpkg.com/vue-router@4.0.0-beta.7/dist/vue-router.global.js"></script>
<title>App</title>
</head>
<body>
<div id="app">
<p>
<router-link to="/foo">foo</router-link>
<router-link to="/bar">bar</router-link>
<router-link to="/baz">baz</router-link>
</p>
<router-view></router-view>
</div>
<script>
const Foo = {
template: "<div>foo</div>"
};
const Bar = {
template: "<div>bar</div>"
};
const routes = [
{
path: "/foo",
component: Foo
},
{
path: "/bar",
component: Bar,
alias: "/baz"
}
];
const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes
});
const app = Vue.createApp({});
app.use(router);
app.mount("#app");
</script>
</body>
</html>
We have the alias
property with the path we want to map to the Bar
component.
Then when we click on the baz
link, we see bar
displayed.
Passing Props to Route Components
We can pass props to route components.
This way, we won’t have to couple the route parameters with the component.
Instead of using the this.$router.currentRoute.value.params
property, we just use props to get the route parameters.
For example, we can write:
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://unpkg.com/vue@next"></script>
<script src="https://unpkg.com/vue-router@4.0.0-beta.7/dist/vue-router.global.js"></script>
<title>App</title>
</head>
<body>
<div id="app">
<p>
<router-link to="/foo">foo</router-link>
<router-link to="/bar/1">bar</router-link>
</p>
<router-view></router-view>
</div>
<script>
const Foo = {
template: "<div>foo</div>"
};
const Bar = {
template: "<div>bar {{id}}</div>",
props: ["id"]
};
const routes = [
{
path: "/foo",
component: Foo
},
{
path: "/bar/:id",
component: Bar,
props: true
}
];
const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes
});
const app = Vue.createApp({});
app.use(router);
app.mount("#app");
</script>
</body>
</html>
We add the props
property to the routes
entry and set it to true
.
And we have the :id
URL parameter placeholder in the route.
Then we add the props
property of Bar
to take the id
prop.
The id
prop is displayed in Bar
‘s template.
This way, we can get the id
prop from the route parameter.
Also, we have the router-link
with the to
prop set to '/bar/1'
.
This way, we see that 1 as the value of id
in the Bar
component.
Conclusion
We can add alias and pass route URL parameters as props instead of accessing the value from the $router
object in Vue Router 4.