frontend web development with angular
play

Frontend Web Development with Angular CC BY-NC-ND Carrot & - PowerPoint PPT Presentation

Frontend Web Development with Angular CC BY-NC-ND Carrot & Company GmbH Agenda Questions Some infos Lecturing Router NgModules Todos CC BY-NC-ND Carrot & Company GmbH Questions? CC BY-NC-ND Carrot


  1. Frontend Web Development with Angular CC BY-NC-ND Carrot & Company GmbH

  2. Agenda ● Questions Some infos ● ● Lecturing ○ Router NgModules ○ ● Todos CC BY-NC-ND Carrot & Company GmbH

  3. Questions? CC BY-NC-ND Carrot & Company GmbH

  4. Some Infos ● Code comments from us were made for improving your code. If you ignore them you might lose points in the next sprint. CC BY-NC-ND Carrot & Company GmbH

  5. Routing & Navigation [https://angular.io/guide/router] CC BY-NC-ND Carrot & Company GmbH

  6. Today's Topics ● Routes Configuration Router Link ● ● Router Outlet ● ActivatedRoute ● Relative Navigation Router Events ● ● Route Guards ● Component-less Route CC BY-NC-ND Carrot & Company GmbH

  7. Today's Topics ● Routing Modules Multiple Router Outlets ● ● Optional Route Parameter ● Query Parameters and Fragments ● Asynchronous Routing Preloading ● CC BY-NC-ND Carrot & Company GmbH

  8. Sample Application ● https://gitlab.fwda.cnc.io/fwda/router CC BY-NC-ND Carrot & Company GmbH

  9. Routes Configuration Route Data Child Routes Route with Parameter Redirecting Route Wildcard Route first-match wins strategy ● ● Route data: ○ page titles, breadcrumb text, and other read-only, static data CC BY-NC-ND Carrot & Company GmbH

  10. Routes Configuration Print navigation Routes Config lifecycle to console RouterModule.forRoot method is a pattern used to register application-wide providers CC BY-NC-ND Carrot & Company GmbH

  11. Router Link & Router Outlet ● Router Outlet acts as a placeholder <a routerLink="/user/bob">link to user component</a> <a [routerLink]="[‘/user’, ‘bob’]">link to user component</a> CC BY-NC-ND Carrot & Company GmbH

  12. ActivatedRoute import { ActivatedRoute } from '@angular/router'; ... constructor(private activatedRoute: ActivatedRoute) { } Important: convert param to number with ‘+’ Unsubscribe from this observable? The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it. CC BY-NC-ND Carrot & Company GmbH

  13. ActivatedRoute ● Observable paramMap and component reuse The router re-uses a component instance when it re-navigates to the same component type ○ without visiting a different component first The route parameters could change each time ○ ○ Eg: A parent component navigation bar had "forward" and "back" buttons that scrolled ■ through the list of persons. Each click navigated to the detail component of a person with the next or previous id. ○ Alternative: Use a snapshot ■ ■ let id = this.activatedRoute.snapshot.paramMap.get('id'); https://angular.io/guide/router#parammap-api CC BY-NC-ND Carrot & Company GmbH

  14. Relative Navigation Current route: localhost:5555/user/1/details <a [routerLink]=" ...">link to user component</a> directory-like syntax: [‘../’] localhost:5555/user/1 [‘../../’] localhost:5555/user [‘../admin’] localhost:5555/user/1/admin [‘./admin’] localhost:5555/user/1/details/admin [‘/admin’] localhost:5555/admin CC BY-NC-ND Carrot & Company GmbH

  15. Relative Navigation import { Router, ActivatedRoute } from '@angular/router'; ... constructor(private router: Router, private activatedRoute: ActivatedRoute){ } ... CC BY-NC-ND Carrot & Company GmbH

  16. Router Events https://angular.io/guide/router#router-events CC BY-NC-ND Carrot & Company GmbH

  17. Route Guards ● The user is not authorized to navigate to the target component ● The user must login first CanActivate, CanActivateChild ● Fetch some data before you display the target component Resolve Save pending changes before leaving a component ● CanDeactivate ● Ask the user if it's OK to discard pending changes rather than save them CC BY-NC-ND Carrot & Company GmbH

  18. Route Guards ● Multiple guards at every level of a routing hierarchy The router checks the CanDeactivate and CanActivateChild guards first, from ● the deepest child route to the top ● Then it checks the CanActivate guards from the top down to the deepest child route Return value of a guard controls the routing behavior ● ○ True Navigation process continues ■ ○ False Navigation process stops and the user stays put ■ ■ Pending guards that have not completed will be canceled, and the entire navigation is canceled CC BY-NC-ND Carrot & Company GmbH

  19. Route Guards CC BY-NC-ND Carrot & Company GmbH

  20. Route Guards CC BY-NC-ND Carrot & Company GmbH

  21. Route Guards CanActivate CanDeactivate CC BY-NC-ND Carrot & Company GmbH

  22. Route Guards CanActivateChild Resolve CC BY-NC-ND Carrot & Company GmbH

  23. Route Guards ● The guard can also cancel the navigation and tell router to navigate elsewhere Requires an Observable to complete , meaning it has emitted all of its values ● Note: The observable provided to the Router must also complete. If the observable does not complete, the navigation will not continue. http://rxmarbles.com/#first CC BY-NC-ND Carrot & Company GmbH

  24. Route Guards ● Guards and the service providers they require must be provided at the module-level ○ Router can retrieve these services from the injector during the navigation process Same rule applies for feature modules loaded asynchronously ○ @NgModule({ declarations: [...], imports: [...], @Injectable() providers: [ export class PermissionGuard implements CanActivate { PersonService, ... constructor(private personService: PersonService) { ], } bootstrap: [...] … }) } export class AppModule {} CC BY-NC-ND Carrot & Company GmbH

  25. Component-less Route ● Grouping routes Makes it easier to guard child routes ● CC BY-NC-ND Carrot & Company GmbH

  26. Routing Modules ● Separates routing concerns from other application concerns Provides a module to replace or remove when testing the application ● ● Provides a well-known location for routing service providers including guards and resolvers ● Does not declare components! CC BY-NC-ND Carrot & Company GmbH

  27. Routing Modules Order! By re-exporting the RouterModule here the components declared in AppModule will have access to router directives such as RouterLink and RouterOutlet. CC BY-NC-ND Carrot & Company GmbH

  28. Routing Modules really necessary? Advice from the Angular Team: Choose one pattern or the other and follow that pattern consistently. CC BY-NC-ND Carrot & Company GmbH

  29. Multiple Router Outlets ● The router only supports one primary unnamed outlet per template A template can also have any number of named outlets ● ● Each named outlet has its own set of routes with their own components ● Multiple outlets can be displaying different content, determined by different routes, all at the same time Named outlets are the targets of secondary routes ● ● Eg: Pop-Up CC BY-NC-ND Carrot & Company GmbH

  30. Multiple Router Outlets & Secondary Routes Secondary routes look like primary routes and you can configure them the same way. ● They are independent of each other ● They work in combination with other routes Route: http://localhost:4200/persons(popup:popup) CC BY-NC-ND Carrot & Company GmbH

  31. Route Parameter Required URL Optional URL Query Parameters Fragment Parameter Parameters (as placeholder (matrix URL in the route) notation) CC BY-NC-ND Carrot & Company GmbH

  32. Optional Route Parameter ● Optional route parameters are not separated by "?" or "&" as they would be in the URL query string ● Separated by semicolons ";" ● Matrix URL notation Eg. localhost:4200/persons;id=15;foo=bar ○ CC BY-NC-ND Carrot & Company GmbH

  33. Query Parameters and Fragments ● Fragments refer to certain elements on the page identified with an id attribute http://localhost:4200/permission-denied?errorCode=1234#permission More information about query parameter handling and preserving of query parameter and fragments: https://angular.io/api/router/NavigationExtras CC BY-NC-ND Carrot & Company GmbH

  34. Sample Application ● https://gitlab.fwda.cnc.io/fwda/ng-modules CC BY-NC-ND Carrot & Company GmbH

  35. Lazy Loading with the Router ● At the moment: AdminModule is loaded when the application starts ○ ○ → Eager loading Means that all modules are loaded when the app launches ■ ● What we want: AdminModule loads only when the user clicks on a link ○ ○ → Lazy loading CC BY-NC-ND Carrot & Company GmbH

  36. Lazy Loading with the Router ● Load feature modules lazily, on request Multiple benefits ● ○ Load feature areas only when requested by the user Speed up load time for users that only visit certain areas of the app ○ CC BY-NC-ND Carrot & Company GmbH

  37. Lazy Loading with the Router ● Provided services in a lazy-loaded module are only visible to that module Module-scoped ○ ● Router lazy-loads a module → it creates a new execution context ● Context has its own injector Child injector ○ ○ Direct child of the root injector Providers of a lazy module and the providers of its imported modules are ● added to the child injector CC BY-NC-ND Carrot & Company GmbH

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend