The routing is set up using navigo.
Each route is defined in ./src/router/routes.ts
.
A route consists of the following:
name
: is used to navigate to a specific route within the application.path
: speaks for itself.tag
: is the name of page that should be rendered
For example:
{
name: RouteNames.HOME;
path: '/';
tag: literal`home-page`;
}
First, add a new route name to the RouteNames
enum in ./src/data/enum/route.ts
like so:
export enum RouteNames {
...,
NAME_OF_PAGE = 'name-of-page', // This is the new route
}
Then go to ./src/router/routes.ts
to make the route accessible to the router:
...
import `../page/name-of-page`;
export const routes: ReadonlyArray<RouteType> = [
...,
{
name: RouteNames.NAME_OF_PAGE,
path: '/path-to-name-of-page',
tag: literal`name-of-page`,
},
];
After that, the router will have access to the new route.
Some routes will require a dynamic route based on, for example, an id or slug. This is possible by doing the following:
path: `/path-to-name-of-page/:${RouteDataParam.ID || RouteDataParam.SLUG}`,
By default ID
and SLUG
are defined as valid parameters.
Other parameters can be added by editing enum RouteDataParam
, in ./src/data/enum/route.ts
.
Make your page component extend from PageElement
. This way, route data can be accessed as follows:
this.routeData[RouteDataParam.ID];
Set VAR_IS_LOCALE_ENABLED
to true
in the .env
file to enable localized routes.
This will automatically prefix the route with the set default locale.
For external navigation, please use <a href="">
.
The <router-link>
element is preferred for internal navigation. It provides two different implementations:
- Use of destination route's path.
<router-link to="/path-to-name-of-page" title="Name of page">
Go to name of page
</router-link>
- Use of destination route's assigned name.
<router-link
to=${{ name: RouteNames.NAME_OF_PAGE }}
title="Name of page"
>
Go to name of page
</router-link>
Navigating with parameters can be done as follows:
<router-link to="/path-to-name-of-page/parameter" title="Name of page">
Go to name of page
</router-link>
or
<router-link
to=${{
name: RouteNames.NAME_OF_PAGE,
routeData: {
[RouteDataParam.ID]: 'parameter',
},
}}
title="Name of page"
>
Go to name of page
</router-link>