Understanding routing in you application is the key to creating a single page application. Routing is what allows view navigation in your application like ‘detail views’, end user bookmarking and even allows you to set up a ‘logged in’ version of your applications views.
Routing isn’t included by default in Angular 2, in fact you have to explicitly include it as a library. I also will say, it’s not incredibly intuitive to configure. We’ll take some time to explain the history of the router and dive into some of the basic concepts.
The router itself is implemented in the optional Router Module, which is kept separate to keep the base library size low. Include it in your main module like this:
import { RouterModule } from '@angular/router';
...
@NgModule({
declarations: [ ... ],
imports: [
RouterModule.forRoot(routes),
...
],
providers: [ ... ],
entryComponents: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {
}
The base HREF is the starting point for your application and is used to create your home route. It’s this starting point that your browser will also use to create a history to prevent ‘breaking the back button’ which is always a sticking point in SPAs.
Here’s the syntax you need to add to you html:
<base href="/">
const routes = [
// Default, or home, path. This matches your Base HREF
{
path: '',
component: HomeComponent
},
...
// Wildcard, or the 'catch-all' route pattern. If the requested
// route does not match anything above, this route is displayed.
{
path: '**',
component: HomeComponent
}
];
Resolves are services that must be completed before allowing the route to be accessed and loaded. This is how we can ensure that the data is available for the route prior to allowing the user to access the route.
A quick example of this would be a UserResolve class that retrieves a list of users before displaying the route.
Guards are a method to prevent a route from being accessed unless a certain state is met.
A quick example of this would be a LoggedInGuard class that prevents a user from accessing a route unless they are logged in.
Child routes are a way to add specific routes to a feature.
Below is an example of an application with a single route. This illustrates including the router module, a base href and a very basic route configuration.
Below is an example of an application with a single route that requires a service to resolve a data retrieval before rendering.
Below is an example of an application with two routes and a child route.
While it may take some time to completely wrap your mind around routing in angular it’s clearly an important part of creating a real SPA. Don’t be afraid to take and reference your own notes!
Tags: angular, angular2, javascript, Routing, TypeScript
Categories: TypeScript
Lets talk!
Join our mailing list, we promise not to spam.