SlideShare a Scribd company logo
Advanced Routing
LAURENT DUVEAU
JUNE 7TH, 2018
© LDEX, 2015Angular Vancouver Meetup, June 2018
Laurent Duveau
@LaurentDuveau
I am based in Montreal, Qc
Founder of the Angular Academy
2-day Angular Classroom Training
111 classes in 2 years!
Montreal, Quebec, Toronto, Ottawa ,
Vancouver, Calgary, Winnipeg,
London, Copenhagen, Helsinki…
© LDEX, 2015Angular Vancouver Meetup, June 2018
ADVANCED ROUTING
Agenda
Lazy Loading
Preloading Modules
Router events
Diagnostic with traces
Auxiliary routes
Routes Transitions (Animations)
Guards
Resolve
© LDEX, 2015Angular Vancouver Meetup, June 2018
Requirement
I assume you already know the basics of
Angular Routing…
… do you ?
4
Lazy Loading
5
© LDEX, 2015Angular Vancouver Meetup, June 2018
LAZY LOADING
Lazy Loading ?
© LDEX, 2015Angular Vancouver Meetup, June 2018
LAZY LOADING
Lazy load the Products Module!
const routes: Routes = [
{path: '', redirectTo:'/home', pathMatch:'full'},
{path: 'products', loadChildren:'./products/products.module#ProductsModule'},
{path: 'home', component: HomeComponent},
{path: 'contact', component: ContactComponent},
];
app.routing.ts
© LDEX, 2015Angular Vancouver Meetup, June 2018
LAZY LOADING
Make its routes relative to ‘products/’
const routes: Routes = [
{ path: 'products', component: ProductListComponent },
{ path: 'products/:id', component: ProductDetailComponent }
];
products.routing.ts
const routes: Routes = [
{ path: '', component: ProductListComponent },
{ path: ':id', component: ProductDetailComponent }
];
products.routing.ts
© LDEX, 2015Angular Vancouver Meetup, June 2018
LAZY LOADING
Do not import lazy loaded modules!
@NgModule({
imports:[BrowserModule, HttpModule, ProductsModule]
})
export class AppModule { }
app.module.ts
@NgModule({
imports:[BrowserModule, HttpModule]
})
export class AppModule { }
app.module.ts
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
10
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Preloading Modules!
Preload lazy-loadable modules in the
background while the user is interacting with
your application
11
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Preloading Modules!
12
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Preloading Modules!
13
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Preloading Modules!
14
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Preloading Modules!
15
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Preloading Modules!
One built-in preloading strategy: PreloadAllModules
Create your Custom Preloading Strategy!
Class that implements PreloadingStrategy
16
@NgModule({
imports: [RouterModule.forRoot(routes,
{ preloadingStrategy: PreloadAllModules })],
exports: [RouterModule],
})
export class AppRoutingModule { }
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
17
Router Events
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Router Events
Event Description
NavigationStart Navigation starts
RoutesRecognized Router parses the URL and the routes are
recognized
RouteConfigLoadStart Before the Router lazy loads a route configuration
RouteConfigLoadEnd After a route has been lazy loaded
NavigationEnd Navigation ends successfully
NavigationCancel Navigation is canceled. This is due to a Route
Guard returning false during navigation
NavigationError Navigation fails due to an unexpected error
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Router Events
20
@Component({
selector: 'my-app',
template: `<router-outlet></router-outlet>`
})
export class AppComponent {
constructor(private router: Router) {}
ngOnInit() {
this.router.events
.subscribe((event) => {
if (event instanceof NavigationEnd) {
console.log('NavigationEnd:', event);
}
});
}
}
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
21
Diagnostic with traces
22
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Activate traces
23
@NgModule({
imports: [RouterModule.forRoot(routes,
{ enableTracing: environment.production ? false : true }
)]
})
export class AppModule { }
app.module.ts
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
24
Auxiliary Routes
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Auxiliary Routes
Navigation happens in a
<router-outlet></router-outlet>
We can have more than one!
So we can navigate to several routes at the same
time
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Auxiliary Routes
Create a named router-outlet
Add a route to target this outlet
Link to navigate to the outlet
27
<router-outlet></router-outlet>
<router-outlet name="popup"></router-outlet>
{path:'contact', component:ContactComponent, outlet:'popup'}
<a [routerLink]="[{outlets: {popup:['contact']}}]">Contact</a>
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
28
Routes Transitions
(Animations)
29
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Animations
Define animations files
30
import { trigger, animate, transition, style } from '@angular/animations';
export const fadeInAnimation =
// trigger name for attaching this animation to an element using the
[@triggerName] syntax
trigger('fadeInAnimation', [
// route 'enter' transition
transition(':enter', [
// css styles at start of transition
style({ opacity: 0 }),
// animation and styles at end of transition
animate('.5s', style({ opacity: 1 }))
]),
]);
fade-in.animation.ts
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Animations
Import BrowserAnimationsModule
Use component decorator
31
@Component({
selector: 'app-product-list’,
animations: [fadeInAnimation],
host: { '[@fadeInAnimation]': ''}
})
export class MyComponent {
animation to use
attached to host to run
animation when
component is activated
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
32
Guards
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Routes Guards
CanActivate CanDeactivate
NavigationNavigation
Component
Decides if a route can be activated
- User logged-in ?
Decides if a route can be deactivated
- Form saved ?
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Routes Guards
35
export class LoginRouteGuard implements CanActivate {
constructor(
private loginService: LoginService,
private router: Router) {}
canActivate() {
if(!this.loginService.isLoggedIn()) {
this.router.navigateByUrl("/login");
return false;
}
return true;
}
}
login-route-guard.service.ts
{ path: 'admin', component: AdminComponent, canActivate: [LoginRouteGuard] },
app-routing.module.ts
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
36
Route Resolver
37
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
Route Resolver
Pre-fetching component data before navigating
Avoid a blank component while waiting for the
data to be returned from the server
Pre-fetch data from the server so it's ready the
moment the route is activated!
Create a service and implement the Resolve
interface
© LDEX, 2015Angular Vancouver Meetup, June 2018
DEMONSTRATION
39
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
40
https://vsavkin.com
© LDEX, 2015Angular Vancouver Meetup, June 2018
ROUTING
41
https://leanpub.com/router
© LDEX, 2015Angular Vancouver Meetup, June 2018
Amazing Angular Classroom Training!
42
© LDEX, 2015Angular Vancouver Meetup, June 2018
Thank you!

More Related Content

PDF
Angular Routing Guard
Knoldus Inc.
 
ODP
Routing & Navigating Pages in Angular 2
Knoldus Inc.
 
PPTX
Angular 2.0 forms
Eyal Vardi
 
PPTX
Angular 9
Raja Vishnu
 
PPTX
Angular modules in depth
Christoffer Noring
 
PPTX
Angular 18 course for begineers and experienced
tejaswinimysoola
 
PPTX
Angular 5 presentation for beginners
Imran Qasim
 
DOCX
Angular Interview Questions & Answers
Ratnala Charan kumar
 
Angular Routing Guard
Knoldus Inc.
 
Routing & Navigating Pages in Angular 2
Knoldus Inc.
 
Angular 2.0 forms
Eyal Vardi
 
Angular 9
Raja Vishnu
 
Angular modules in depth
Christoffer Noring
 
Angular 18 course for begineers and experienced
tejaswinimysoola
 
Angular 5 presentation for beginners
Imran Qasim
 
Angular Interview Questions & Answers
Ratnala Charan kumar
 

What's hot (20)

PPTX
Introduction to angular with a simple but complete project
Jadson Santos
 
PPT
Angular 8
Sunil OS
 
PPTX
Sharing Data Between Angular Components
Squash Apps Pvt Ltd
 
PDF
Angular routing
Sultan Ahmed
 
PPT
Angular Introduction By Surekha Gadkari
Surekha Gadkari
 
PPTX
Angular tutorial
Rohit Gupta
 
PDF
Angular - Chapter 7 - HTTP Services
WebStackAcademy
 
PPTX
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
Malla Reddy University
 
PDF
Angular data binding
Sultan Ahmed
 
PPTX
Angular introduction students
Christian John Felix
 
PPTX
Angular Directives
Malla Reddy University
 
PDF
Building blocks of Angular
Knoldus Inc.
 
PPTX
Angular
Mouad EL Fakir
 
PPTX
Angular Data Binding
Jennifer Estrada
 
PDF
Angular Dependency Injection
Nir Kaufman
 
PDF
Angular Directives
iFour Technolab Pvt. Ltd.
 
PPTX
Angular 14.pptx
MohaNedGhawar
 
PDF
Angular 16 – the rise of Signals
Coding Academy
 
PPTX
React hooks
Sadhna Rana
 
PDF
JavaScript Programming
Sehwan Noh
 
Introduction to angular with a simple but complete project
Jadson Santos
 
Angular 8
Sunil OS
 
Sharing Data Between Angular Components
Squash Apps Pvt Ltd
 
Angular routing
Sultan Ahmed
 
Angular Introduction By Surekha Gadkari
Surekha Gadkari
 
Angular tutorial
Rohit Gupta
 
Angular - Chapter 7 - HTTP Services
WebStackAcademy
 
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
Malla Reddy University
 
Angular data binding
Sultan Ahmed
 
Angular introduction students
Christian John Felix
 
Angular Directives
Malla Reddy University
 
Building blocks of Angular
Knoldus Inc.
 
Angular Data Binding
Jennifer Estrada
 
Angular Dependency Injection
Nir Kaufman
 
Angular Directives
iFour Technolab Pvt. Ltd.
 
Angular 14.pptx
MohaNedGhawar
 
Angular 16 – the rise of Signals
Coding Academy
 
React hooks
Sadhna Rana
 
JavaScript Programming
Sehwan Noh
 
Ad

Similar to Angular Advanced Routing (20)

PDF
8 things you didn't know about the Angular Router, you won't believe #6!
Laurent Duveau
 
PPTX
Angular2 routing
TejinderMakkar
 
PPTX
UQ21CA642BA1-Unit-3-WAF-Class18-Introduction to Angular Routing.pptx
TamalDey28
 
PDF
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
Katy Slemon
 
DOCX
Angular2RoutingSetupByShubham
Shubham Verma
 
PDF
Angular performance slides
David Barreto
 
DOCX
lazy loading
srinivaskapa1
 
DOCX
angular
srinivaskapa1
 
DOCX
What is Lazy Loading
srinivaskapa1
 
PDF
Angular 7 Firebase5 CRUD Operations with Reactive Forms
Digamber Singh
 
PDF
Angular resolver tutorial
Katy Slemon
 
DOCX
Understand routing in angular 2
codeandyou forums
 
PDF
The newst new Router for Angular 2 - Talk at @angular_berlin, July 2016
Manfred Steyer
 
PDF
Angular_BootStrap.pdf
raja344116
 
PPTX
Neoito — Routing and navigation in Angular
Neoito
 
PDF
Angular Interview Question & Answers PDF By ScholarHat
Scholarhat
 
PDF
Angular 7 training_topics
AmanCSE1
 
PPTX
Routing And Navigation
Eyal Vardi
 
PDF
Angular 2 MVD workshop
Iran Reyes Fleitas
 
PDF
Mastering angular - Dot Net Tricks
Gaurav Singh
 
8 things you didn't know about the Angular Router, you won't believe #6!
Laurent Duveau
 
Angular2 routing
TejinderMakkar
 
UQ21CA642BA1-Unit-3-WAF-Class18-Introduction to Angular Routing.pptx
TamalDey28
 
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
Katy Slemon
 
Angular2RoutingSetupByShubham
Shubham Verma
 
Angular performance slides
David Barreto
 
lazy loading
srinivaskapa1
 
angular
srinivaskapa1
 
What is Lazy Loading
srinivaskapa1
 
Angular 7 Firebase5 CRUD Operations with Reactive Forms
Digamber Singh
 
Angular resolver tutorial
Katy Slemon
 
Understand routing in angular 2
codeandyou forums
 
The newst new Router for Angular 2 - Talk at @angular_berlin, July 2016
Manfred Steyer
 
Angular_BootStrap.pdf
raja344116
 
Neoito — Routing and navigation in Angular
Neoito
 
Angular Interview Question & Answers PDF By ScholarHat
Scholarhat
 
Angular 7 training_topics
AmanCSE1
 
Routing And Navigation
Eyal Vardi
 
Angular 2 MVD workshop
Iran Reyes Fleitas
 
Mastering angular - Dot Net Tricks
Gaurav Singh
 
Ad

More from Laurent Duveau (20)

PDF
Shit happens… debugging an Angular app.
Laurent Duveau
 
PDF
De 0 à Angular en 1h30! (french)
Laurent Duveau
 
PDF
Angular 6, CLI 6, Material 6 (french)
Laurent Duveau
 
PDF
Debugging an Angular App
Laurent Duveau
 
PDF
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
PDF
Introduction to Angular for .NET Developers
Laurent Duveau
 
PDF
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
PDF
Introduction to Angular for .NET Developers
Laurent Duveau
 
PDF
Introduction to Angular for .NET Developers
Laurent Duveau
 
PDF
Introduction to Angular with TypeScript for .NET Developers
Laurent Duveau
 
PDF
Introduction to Angular for .NET Developers
Laurent Duveau
 
PDF
Introduction à Angular 2
Laurent Duveau
 
PDF
Angular 2... so can I use it now??
Laurent Duveau
 
PPTX
ngconf 2016 (french)
Laurent Duveau
 
PDF
Microsoft Edge pour les développeurs web
Laurent Duveau
 
PDF
Microsoft Edge pour les développeurs web
Laurent Duveau
 
PDF
Introduction to SPAs with AngularJS
Laurent Duveau
 
PDF
Xamarin.Forms [french]
Laurent Duveau
 
PDF
Back from Xamarin Evolve 2014
Laurent Duveau
 
PDF
Windows App Studio
Laurent Duveau
 
Shit happens… debugging an Angular app.
Laurent Duveau
 
De 0 à Angular en 1h30! (french)
Laurent Duveau
 
Angular 6, CLI 6, Material 6 (french)
Laurent Duveau
 
Debugging an Angular App
Laurent Duveau
 
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
Introduction to Angular for .NET Developers
Laurent Duveau
 
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
Introduction to Angular for .NET Developers
Laurent Duveau
 
Introduction to Angular for .NET Developers
Laurent Duveau
 
Introduction to Angular with TypeScript for .NET Developers
Laurent Duveau
 
Introduction to Angular for .NET Developers
Laurent Duveau
 
Introduction à Angular 2
Laurent Duveau
 
Angular 2... so can I use it now??
Laurent Duveau
 
ngconf 2016 (french)
Laurent Duveau
 
Microsoft Edge pour les développeurs web
Laurent Duveau
 
Microsoft Edge pour les développeurs web
Laurent Duveau
 
Introduction to SPAs with AngularJS
Laurent Duveau
 
Xamarin.Forms [french]
Laurent Duveau
 
Back from Xamarin Evolve 2014
Laurent Duveau
 
Windows App Studio
Laurent Duveau
 

Recently uploaded (20)

PDF
How Onsite IT Support Drives Business Efficiency, Security, and Growth.pdf
Captain IT
 
PDF
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
PDF
madgavkar20181017ppt McKinsey Presentation.pdf
georgschmitzdoerner
 
PDF
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
PDF
Test Bank, Solutions for Java How to Program, An Objects-Natural Approach, 12...
famaw19526
 
PPTX
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
PDF
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
PPTX
C Programming Basics concept krnppt.pptx
Karan Prajapat
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
Shreyas_Phanse_Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
SHREYAS PHANSE
 
PDF
Google’s NotebookLM Unveils Video Overviews
SOFTTECHHUB
 
PDF
Software Development Company | KodekX
KodekX
 
PDF
REPORT: Heating appliances market in Poland 2024
SPIUG
 
PDF
DevOps & Developer Experience Summer BBQ
AUGNYC
 
PDF
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
CIFDAQ
 
PDF
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CIFDAQ
 
How Onsite IT Support Drives Business Efficiency, Security, and Growth.pdf
Captain IT
 
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
madgavkar20181017ppt McKinsey Presentation.pdf
georgschmitzdoerner
 
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
Test Bank, Solutions for Java How to Program, An Objects-Natural Approach, 12...
famaw19526
 
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
C Programming Basics concept krnppt.pptx
Karan Prajapat
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
Shreyas_Phanse_Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
SHREYAS PHANSE
 
Google’s NotebookLM Unveils Video Overviews
SOFTTECHHUB
 
Software Development Company | KodekX
KodekX
 
REPORT: Heating appliances market in Poland 2024
SPIUG
 
DevOps & Developer Experience Summer BBQ
AUGNYC
 
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
CIFDAQ
 
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CIFDAQ
 

Angular Advanced Routing

  • 2. © LDEX, 2015Angular Vancouver Meetup, June 2018 Laurent Duveau @LaurentDuveau I am based in Montreal, Qc Founder of the Angular Academy 2-day Angular Classroom Training 111 classes in 2 years! Montreal, Quebec, Toronto, Ottawa , Vancouver, Calgary, Winnipeg, London, Copenhagen, Helsinki…
  • 3. © LDEX, 2015Angular Vancouver Meetup, June 2018 ADVANCED ROUTING Agenda Lazy Loading Preloading Modules Router events Diagnostic with traces Auxiliary routes Routes Transitions (Animations) Guards Resolve
  • 4. © LDEX, 2015Angular Vancouver Meetup, June 2018 Requirement I assume you already know the basics of Angular Routing… … do you ? 4
  • 6. © LDEX, 2015Angular Vancouver Meetup, June 2018 LAZY LOADING Lazy Loading ?
  • 7. © LDEX, 2015Angular Vancouver Meetup, June 2018 LAZY LOADING Lazy load the Products Module! const routes: Routes = [ {path: '', redirectTo:'/home', pathMatch:'full'}, {path: 'products', loadChildren:'./products/products.module#ProductsModule'}, {path: 'home', component: HomeComponent}, {path: 'contact', component: ContactComponent}, ]; app.routing.ts
  • 8. © LDEX, 2015Angular Vancouver Meetup, June 2018 LAZY LOADING Make its routes relative to ‘products/’ const routes: Routes = [ { path: 'products', component: ProductListComponent }, { path: 'products/:id', component: ProductDetailComponent } ]; products.routing.ts const routes: Routes = [ { path: '', component: ProductListComponent }, { path: ':id', component: ProductDetailComponent } ]; products.routing.ts
  • 9. © LDEX, 2015Angular Vancouver Meetup, June 2018 LAZY LOADING Do not import lazy loaded modules! @NgModule({ imports:[BrowserModule, HttpModule, ProductsModule] }) export class AppModule { } app.module.ts @NgModule({ imports:[BrowserModule, HttpModule] }) export class AppModule { } app.module.ts
  • 10. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 10
  • 11. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Preloading Modules! Preload lazy-loadable modules in the background while the user is interacting with your application 11
  • 12. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Preloading Modules! 12
  • 13. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Preloading Modules! 13
  • 14. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Preloading Modules! 14
  • 15. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Preloading Modules! 15
  • 16. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Preloading Modules! One built-in preloading strategy: PreloadAllModules Create your Custom Preloading Strategy! Class that implements PreloadingStrategy 16 @NgModule({ imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })], exports: [RouterModule], }) export class AppRoutingModule { }
  • 17. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 17
  • 19. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Router Events Event Description NavigationStart Navigation starts RoutesRecognized Router parses the URL and the routes are recognized RouteConfigLoadStart Before the Router lazy loads a route configuration RouteConfigLoadEnd After a route has been lazy loaded NavigationEnd Navigation ends successfully NavigationCancel Navigation is canceled. This is due to a Route Guard returning false during navigation NavigationError Navigation fails due to an unexpected error
  • 20. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Router Events 20 @Component({ selector: 'my-app', template: `<router-outlet></router-outlet>` }) export class AppComponent { constructor(private router: Router) {} ngOnInit() { this.router.events .subscribe((event) => { if (event instanceof NavigationEnd) { console.log('NavigationEnd:', event); } }); } }
  • 21. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 21
  • 23. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Activate traces 23 @NgModule({ imports: [RouterModule.forRoot(routes, { enableTracing: environment.production ? false : true } )] }) export class AppModule { } app.module.ts
  • 24. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 24
  • 26. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Auxiliary Routes Navigation happens in a <router-outlet></router-outlet> We can have more than one! So we can navigate to several routes at the same time
  • 27. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Auxiliary Routes Create a named router-outlet Add a route to target this outlet Link to navigate to the outlet 27 <router-outlet></router-outlet> <router-outlet name="popup"></router-outlet> {path:'contact', component:ContactComponent, outlet:'popup'} <a [routerLink]="[{outlets: {popup:['contact']}}]">Contact</a>
  • 28. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 28
  • 30. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Animations Define animations files 30 import { trigger, animate, transition, style } from '@angular/animations'; export const fadeInAnimation = // trigger name for attaching this animation to an element using the [@triggerName] syntax trigger('fadeInAnimation', [ // route 'enter' transition transition(':enter', [ // css styles at start of transition style({ opacity: 0 }), // animation and styles at end of transition animate('.5s', style({ opacity: 1 })) ]), ]); fade-in.animation.ts
  • 31. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Animations Import BrowserAnimationsModule Use component decorator 31 @Component({ selector: 'app-product-list’, animations: [fadeInAnimation], host: { '[@fadeInAnimation]': ''} }) export class MyComponent { animation to use attached to host to run animation when component is activated
  • 32. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 32
  • 34. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Routes Guards CanActivate CanDeactivate NavigationNavigation Component Decides if a route can be activated - User logged-in ? Decides if a route can be deactivated - Form saved ?
  • 35. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Routes Guards 35 export class LoginRouteGuard implements CanActivate { constructor( private loginService: LoginService, private router: Router) {} canActivate() { if(!this.loginService.isLoggedIn()) { this.router.navigateByUrl("/login"); return false; } return true; } } login-route-guard.service.ts { path: 'admin', component: AdminComponent, canActivate: [LoginRouteGuard] }, app-routing.module.ts
  • 36. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 36
  • 38. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING Route Resolver Pre-fetching component data before navigating Avoid a blank component while waiting for the data to be returned from the server Pre-fetch data from the server so it's ready the moment the route is activated! Create a service and implement the Resolve interface
  • 39. © LDEX, 2015Angular Vancouver Meetup, June 2018 DEMONSTRATION 39
  • 40. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING 40 https://vsavkin.com
  • 41. © LDEX, 2015Angular Vancouver Meetup, June 2018 ROUTING 41 https://leanpub.com/router
  • 42. © LDEX, 2015Angular Vancouver Meetup, June 2018 Amazing Angular Classroom Training! 42
  • 43. © LDEX, 2015Angular Vancouver Meetup, June 2018 Thank you!