Vue.js is an easy to use web app framework that we can use to develop interactive front end apps.
Vue Router is a URL router that maps URLs to components.
In this article, we’ll look at how to add redirects and alias to our routes.
Redirect
We can add redirects from one route to another by adding the redirect
property to a route.
For example, we can add a redirect as follows:
src/index.js
:
const Bar = { template: "<div>bar</div>" };
const routes = [
{ path: "/foo", redirect: "/bar" },
{ path: "/bar", component: Bar }
];
const router = new VueRouter({
routes
});
new Vue({
el: "#app",
router
});
index.html
:
<!DOCTYPE html>
<html>
<head>
<title>App</title>
<meta charset="UTF-8" />
<script src="[https://unpkg.com/vue/dist/vue.js](https://unpkg.com/vue/dist/vue.js)"></script>
<script src="[https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js)"></script>
</head>
<body>
<div id="app">
<router-view></router-view>
</div>
<script src="src/index.js"></script>
</body>
</html>
Then when we go to /#/bar
in the browser, we get bar
displayed.
A redirect can also target a named route. For example, we can write:
src/index.js
:
const Bar = { template: "<div>bar</div>" };
const routes = [
{ path: "/foo", redirect: { name: "bar" } },
{ path: "/bar", component: Bar, name: "bar" }
];
const router = new VueRouter({
routes
});
new Vue({
el: "#app",
router
});
index.html
:
<!DOCTYPE html>
<html>
<head>
<title>App</title>
<meta charset="UTF-8" />
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
<router-view></router-view>
</div>
<script src="src/index.js"></script>
</body>
</html>
Then we get the same result.
We can also set the redirect
property to a function. For instance, we can set it to a function that returns a route as follows:
src/index.js
:
const Bar = { template: "<div>bar</div>" };
const routes = [
{ path: "/foo", redirect: to => "bar" },
{ path: "/bar", component: Bar }
];
const router = new VueRouter({
routes
});
new Vue({
el: "#app",
router
});
Then we get the same result as the previous examples.
Navigation guards aren’t applied on routes that redirect, only on its target. Alias
A redirect means that when a user visits /foo
then the URL will be replaced by /bar
and then matched as /bar
.
An alias means of /foo
that’s set as /bar
means that when the user visits /bar
, the URL remains /bar
, but it’ll be matched as if the user is visiting /foo
.
For example, we can define a route with an alias as follows:
src/index.js
:
const Foo = { template: "<div>foo</div>" };
const routes = [{ path: "/foo", component: Foo, alias: "/bar" }];
const router = new VueRouter({
routes
});
new Vue({
el: "#app",
router
});
index.html
:
<!DOCTYPE html>
<html>
<head>
<title>App</title>
<meta charset="UTF-8" />
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
<router-view></router-view>
</div>
<script src="src/index.js"></script>
</body>
</html>
Then we get foo
when we go to /#/foo
or /#/bar
.
An alias lets us map any route to any URL without being constrained by the nesting structure of the routes.
This is handy for mapping a URL that we want for a nested route.
For example, if we define an alias for a nested route as follows:
src/index.js
:
const Foo = {
template: `<div>
foo
<router-view></router-view>
</div>`
};
const Bar = { template: "<div>bar</div>" };
const routes = [
{
path: "/foo",
component: Foo,
children: [{ path: "/bar", component: Bar }]
}
];
const router = new VueRouter({
routes
});
new Vue({
el: "#app",
router
});
index.html
:
<!DOCTYPE html>
<html>
<head>
<title>App</title>
<meta charset="UTF-8" />
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
<router-view></router-view>
</div>
<script src="src/index.js"></script>
</body>
</html>
Then when we go to /#/foobar
, we get:
foobar
displayed on the screen.
We also get the same thing displayed if we go to /#/foo/bar
.
Therefore, we don’t have to follow the usual convention for nested route URLs if we use an alias.
Conclusion
Redirects and aliases are handy features of the Vue Router.
Redirects let us redirect from one route to another. Navigation guards aren’t run on redirect routes.
Aliases let us create a new URL for an existing route. When we go to the path or the alias, we get the same result when we map a path to an alias.
This is handy when we don’t want to follow the usual convention for nested route URLs for example.