Angular VS React 2024
https://youtu.be/K9vBpIq8Wck?si=2vbxsVfUgXuBX41b
schematics
ng config schematics.@schematics/angular:component.style scss
Angular 17
ng update @angular/core@17 @angular/cli@17npm install bootstrap@5.3.2 @popperjs/core@2.11.8 @ng-bootstrap/ng-bootstrap@16.0.0
How can I check which version of Angular from browser?
console command to tell angular version from live website
getAllAngularRootElements()[0].attributes["ng-version"];
Standalone Compoonents
- available in v14+
- no longer need module
ESBuild
faster
Blog
ng update @angular/core@17 @angular/cli@17 --force
Upgrade
- must do git commit before running
14 to 15
- Angular v15 supports node.js versions: 14.20.x, 16.13.x and 18.10.x.
ng update @angular/core@15 @angular/cli@15
Run ng update @angular/core@14 @angular/cli@14 --force (replace 14 with your current versions if different). This command attempts the update while ignoring peer dependency warnings, but it's crucial to identify and address them later.
Carefully review the console output for warnings about incompatible peer dependencies. These warnings will specify the dependency name and its conflicting version requirement.
updating page title
import { Title } from '@angular/platform-browser';
constructor (private titleService: Title) {}
this.titleService.setTitle('Ambitious Royalty | DJ & Nightlife Promotions');
15 to 16
ng update @angular/core@16 @angular/cli@16 --force
History Object
When working with the history object in modern Angular applications using TypeScript, developers may encounter several common issues:
1. Type Safety
TypeScript enforces type safety, which can sometimes lead to issues when interacting with the history object, especially if the types are not explicitly defined.
Solution:
Ensure that you define the types correctly when using the history object. For example:
import { Location } from '@angular/common';
constructor(private location: Location) {}
goBack(): void {
this.location.back();
}
2. Navigation and State Management
Managing navigation state can be complex, especially when you need to maintain state across different routes.
Solution:
Use Angular's Router service to handle navigation and state management more effectively.
import { Router } from '@angular/router';
constructor(private router: Router) {}
navigateToHome(): void {
this.router.navigate(['/home']);
}
3. Browser Compatibility
Different browsers may have slight variations in how they handle the history object, which can lead to inconsistencies.
Solution:
Use Angular's Location service, which provides a consistent API for interacting with the browser's URL.
import { Location } from '@angular/common';
constructor(private location: Location) {}
goForward(): void {
this.location.forward();
}
4. Handling Popstate Events
Listening to popstate events can be tricky, especially when you need to perform specific actions based on the navigation history.
Solution:
Use Angular's Router events to handle navigation changes more effectively.
import { Router, NavigationEnd } from '@angular/router';
import { filter } from 'rxjs/operators';
constructor(private router: Router) {
this.router.events.pipe(
filter(event => event instanceof NavigationEnd)
).subscribe((event: NavigationEnd) => {
// Handle navigation end event
});
}
5. Preventing Unwanted Navigation
Preventing users from navigating away from a page (e.g., when there are unsaved changes) can be challenging.
Solution: Implement a guard to handle such scenarios.
import { CanDeactivate } from '@angular/router';
export interface CanComponentDeactivate {
canDeactivate: () => boolean;
}
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate): boolean {
return component.canDeactivate ? component.canDeactivate() : true;
}
}