1. Angular CLI Commands


ng new project-name // Create a new Angular project
ng serve // Start the development server
ng build // Build the project for production
ng generate component x // Generate a new component
ng generate service x // Generate a new service
ng generate module x // Generate a new module
ng test // Run unit tests
ng lint // Run linting
ng update // Update Angular dependencies

2. Components


@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'My App';
}

3. Directives


*ngIf="condition" // Conditional rendering
*ngFor="let item of items" // Loop through items
[ngClass]="{'class': condition}" // Conditional class binding
[ngStyle]="{'color': 'red'}" // Inline style binding

4. Data Binding


{{ expression }} // Interpolation (one-way)
[property]="expression" // Property binding (one-way)
(event)="handler()" // Event binding (one-way)
[(ngModel)]="property" // Two-way data binding

5. Services


@Injectable({
providedIn: 'root'
})
export class MyService {
constructor() {}
getData() { return 'Data'; }
}

6. Dependency Injection


constructor(private service: MyService) {}

7. Routing


const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'about', component: AboutComponent }
];

@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}

8. Forms


<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<input formControlName="name" />
<button type="submit">Submit</button>
</form>

this.myForm = this.fb.group({
name: ['', Validators.required]
});

9. HTTP Client


import { HttpClient } from '@angular/common/http';

constructor(private http: HttpClient) {}

this.http.get('https://api.example.com/data').subscribe(data => {
console.log(data);
});

10. Pipes


{{ value | date }} // Format date
{{ value | uppercase }} // Convert to uppercase
{{ value | currency }} // Format as currency
{{ value | json }} // Convert to JSON

11. Lifecycle Hooks


ngOnInit() {} // Called after the component is initialized
ngOnChanges() {} // Called when input properties change
ngOnDestroy() {} // Called before the component is destroyed

12. Modules


@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}

13. Guards


@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
canActivate(): boolean {
return true; // Logic to allow/deny access
}
}

14. Interceptors


@Injectable()
export class AuthInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authReq = req.clone({ headers: req.headers.set('Authorization', 'token') });
return next.handle(authReq);
}
}

15. RxJS Operators


import { map, filter, tap } from 'rxjs/operators';

this.http.get('url').pipe(
map(data => data),
filter(data => data.length > 0),
tap(data => console.log(data))
).subscribe();

16. Observables


import { Observable } from 'rxjs';

const myObservable = new Observable(observer => {
observer.next('Hello');
observer.complete();
});

17. Async Pipe


<div *ngIf="data$ | async as data">
{{ data }}
</div>

18. Template Reference Variables


<input #myInput />
<button (click)="doSomething(myInput.value)">Submit</button>

19. Event Emitters


@Output() myEvent = new EventEmitter<string>();

this.myEvent.emit('Hello');

20. NgModule Imports


import { FormsModule } from '@angular/forms';

@NgModule({
imports: [FormsModule]
})
export class AppModule {}

21. Custom Pipes


import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'customPipe' })
export class CustomPipe implements PipeTransform {
transform(value: string): string {
return value.toUpperCase();
}
}

22. TrackBy in ngFor


<div *ngFor="let item of items; trackBy: trackByFn">
{{ item.name }}
</div>

trackByFn(index: number, item: any): number {
return item.id; // or unique identifier
}

23. ViewChild


@ViewChild('myInput') myInput: ElementRef;

ngAfterViewInit() {
this.myInput.nativeElement.focus();
}

24. Content Projection


<ng-content></ng-content> // Use in component template

25. Angular Animations


import { trigger, state, style, transition, animate } from '@angular/animations';

@Component({
animations: [
trigger('myAnimation', [
state('start', style({ opacity: 0 })),
state('end', style({ opacity: 1 })),
transition('start => end', animate('500ms ease-in'))
])
]
})

26. NgIf with Else


<div *ngIf="condition; else elseBlock">Content</div>
<ng-template #elseBlock>Else Content</ng-template>

27. NgSwitch


<div [ngSwitch]="value">
<div *ngSwitchCase="'A'">Case A</div>
<div *ngSwitchCase="'B'">Case B</div>
<div *ngSwitchDefault>Default Case</div>
</div>

28. Angular Material


import { MatButtonModule } from '@angular/material/button';

@NgModule({
imports: [MatButtonModule]
})
export class AppModule {}

29. Lazy Loading Modules


const routes: Routes = [
{ path: 'feature', loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule) }
];

30. Angular Universal


import { AppServerModule } from './app/app.server.module';

export { AppServerModule };

31. Change Detection


import { ChangeDetectorRef } from '@angular/core';

constructor(private cdr: ChangeDetectorRef) {}

someMethod() {
this.cdr.detectChanges();
}

32. NgZone


import { NgZone } from '@angular/core';

constructor(private zone: NgZone) {}

this.zone.run(() => {
// Code to run inside Angular zone
});

33. Angular Ivy


ng build --prod // Enable Ivy by default in Angular 9+

34. Service Workers


ng add @angular/pwa // Add PWA support

35. Service Worker Registration


if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/ngsw-worker.js').then(registration => {
console.log('Service Worker registered with scope:', registration.scope);
});
});
}

36. Angular Environment Variables


export const environment = {
production: false,
apiUrl: 'http://localhost:3000'
};

37. Custom Validators


import { AbstractControl, ValidatorFn } from '@angular/forms';

export function customValidator(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
const valid = /* validation logic */;
return valid ? null : { 'customError': { value: control.value } };
};
}

38. Reactive Forms


import { FormGroup, FormBuilder } from '@angular/forms';

this.myForm = this.fb.group({
name: [''],
age: ['']
});

39. Template-Driven Forms


<form #myForm="ngForm">
<input name="name" ngModel />
<button [disabled]="!myForm.valid">Submit</button>
</form>

40. NgModel


<input [(ngModel)]="property" />

41. FormArray


this.myForm = this.fb.group({
items: this.fb.array([])
});

get items(): FormArray {
return this.myForm.get('items') as FormArray;
}

42. FormBuilder


constructor(private fb: FormBuilder) {}

43. Validators


import { Validators } from '@angular/forms';

this.myForm = this.fb.group({
name: ['', Validators.required],
email: ['', [Validators.required, Validators.email]]
});

44. NgFor with Index


<div *ngFor="let item of items; let i = index">
{{ i }}: {{ item }}
</div>

45. NgClass with Multiple Classes


<div [ngClass]="{'class1': condition1, 'class2': condition2}">Content</div>

46. NgStyle with Multiple Styles


<div [ngStyle]="{'color': color, 'font-size': size}">Styled Content</div>

47. HostListener


@HostListener('click', ['$event'])
onClick(event: MouseEvent) {
console.log('Element clicked:', event);
}

48. HostBinding


@HostBinding('class.active') isActive = true;

49. NgIf with Async Pipe


<div *ngIf="data$ | async as data">{{ data }}</div>

50. NgTemplateOutlet


<ng-container *ngTemplateOutlet="templateRef"></ng-container>

51. Dynamic Component Loading


import { ComponentFactoryResolver, ViewChild, ViewContainerRef } from '@angular/core';

@ViewChild('container', { read: ViewContainerRef }) container: ViewContainerRef;

const componentFactory = this.resolver.resolveComponentFactory(MyComponent);
this.container.createComponent(componentFactory);

52. Change Detection Strategy


@Component({
changeDetection: ChangeDetectionStrategy.OnPush
})

53. NgZone.runOutsideAngular


this.zone.runOutsideAngular(() => {
// Code to run outside Angular's zone
});

54. Angular Lifecycle Hooks


ngOnInit() {}
ngOnChanges() {}
ngOnDestroy() {}

55. Angular Pipes


import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'myPipe' })
export class MyPipe implements PipeTransform {
transform(value: any): any {
return value; // Custom transformation logic
}
}

56. NgIf with TrackBy


<div *ngFor="let item of items; trackBy: trackByFn">
{{ item.name }}
</div>

trackByFn(index: number, item: any): number {
return item.id; // Unique identifier
}

57. NgFor with Let


<div *ngFor="let item of items; let i = index">
{{ i }}: {{ item }}
</div>

58. NgSwitch with Default Case


<div [ngSwitch]="value">
<div *ngSwitchCase="'A'">Case A</div>
<div *ngSwitchDefault>Default Case</div>
</div>

59. Angular Forms Validation


this.myForm = this.fb.group({
name: ['', Validators.required],
age: ['', [Validators.required, Validators.min(18)]]
});

60. FormGroup and FormControl


import { FormGroup, FormControl } from '@angular/forms';

this.myForm = new FormGroup({
name: new FormControl(''),
age: new FormControl('')
});

61. FormBuilder with FormArray


this.myForm = this.fb.group({
items: this.fb.array([this.fb.control('')])
});

62. Reactive Forms with Validation


this.myForm = this.fb.group({
email: ['', [Validators.required, Validators.email]]
});

63. Template-Driven Forms with Validation


<form #form="ngForm">
<input name="email" ngModel required email />
<button [disabled]="!form.valid">Submit</button>
</form>

64. FormControl with Initial Value


this.myControl = new FormControl('Initial Value');

65. FormArray with Dynamic Controls


addItem() {
this.items.push(this.fb.control(''));
}

66. Custom Form Control


import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';

@Component({
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CustomInputComponent),
multi: true
}]
})
export class CustomInputComponent implements ControlValueAccessor {
writeValue(value: any): void {}
registerOnChange(fn: any): void {}
registerOnTouched(fn: any): void {}
}

67. Angular Material Dialog


import { MatDialog } from '@angular/material/dialog';

constructor(private dialog: MatDialog) {}

openDialog() {
this.dialog.open(MyDialogComponent);
}

68. Angular Material Snackbar


import { MatSnackBar } from '@angular/material/snack-bar';

constructor(private snackBar: MatSnackBar) {}

openSnackBar(message: string) {
this.snackBar.open(message, 'Close', { duration: 2000 });
}

69. Angular Material Table


import { MatTableDataSource } from '@angular/material/table';

dataSource = new MatTableDataSource(data);

70. Angular Material Pagination


import { MatPaginator } from '@angular/material/paginator';

@ViewChild(MatPaginator) paginator: MatPaginator;

ngAfterViewInit() {
this.dataSource.paginator = this.paginator;
}

71. Angular Material Sort


import { MatSort } from '@angular/material/sort';

@ViewChild(MatSort) sort: MatSort;

ngAfterViewInit() {
this.dataSource.sort = this.sort;
}

72. Angular Material Form Field


<mat-form-field>
<input matInput placeholder="Enter your name">
</mat-form-field>

73. Angular Material Button

 
<button mat-button>Click me!</button>

74. Angular Material Checkbox


<mat-checkbox>Check me!</mat-checkbox>

75. Angular Material Radio Button


<mat-radio-group>
<mat-radio-button value="1">Option 1</mat-radio-button>
<mat-radio-button value="2">Option 2</mat-radio-button>
</mat-radio-group>

76. Angular Material Select


<mat-form-field>
<mat-select placeholder="Select an option">
<mat-option value="1">Option 1</mat-option>
<mat-option value="2">Option 2</mat-option>
</mat-select>
</mat-form-field>

77. Angular Material Tooltip


<button mat-button matTooltip="Tooltip message">Hover me!</button>

78. Angular Material Icon


<mat-icon>home</mat-icon>

79. Angular Material Card


<mat-card>
<mat-card-title>Card Title</mat-card-title>
<mat-card-content>Card content goes here.</mat-card-content>
</mat-card>

80. Angular Material Grid List


<mat-grid-list cols="2" rowHeight="2:1">
<mat-grid-tile>Tile 1</mat-grid-tile>
<mat-grid-tile>Tile 2</mat-grid-tile>
</mat-grid-list>

81. Angular Material Stepper


<mat-horizontal-stepper>
<mat-step label="Step 1">Content 1</mat-step>
<mat-step label="Step 2">Content 2</mat-step>
</mat-horizontal-stepper>

82. Angular Material Datepicker


<mat-form-field>
<input matInput [matDatepicker]="picker">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>

83. Angular Material Slider


<mat-slider min="1" max="100" step="1" value="50"></mat-slider>

84. Angular Material Progress Bar


<mat-progress-bar mode="determinate" value="40"></mat-progress-bar>

85. Angular Material Progress Spinner


<mat-spinner></mat-spinner>

86. Angular Material Divider


<mat-divider></mat-divider>

87. Angular Material Expansion Panel


<mat-accordion>
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>Expansion Panel Title</mat-panel-title>
</mat-expansion-panel-header>
<p>Expansion panel content</p>
</mat-expansion-panel>
</mat-accordion>

88. Angular Material List


<mat-list>
<mat-list-item>Item 1</mat-list-item>
<mat-list-item>Item 2</mat-list-item>
</mat-list>

89. Angular Material Menu


<button mat-button [matMenuTriggerFor]="menu">Menu</button>
<mat-menu #menu>
<button <pre>
<code>
mat-menu-item>Item 1</button>
<button mat-menu-item>Item 2</button>
</mat-menu>

90. Angular Material Snackbar with Action


this.snackBar.open('Message', 'Action', {
duration: 2000,
panelClass: ['custom-snackbar']
});

91. Angular Material Chips


<mat-chip-list>
<mat-chip>Chip 1</mat-chip>
<mat-chip>Chip 2</mat-chip>
</mat-chip-list>

92. Angular Material Badge


<span matBadge="4">Notifications</span>

93. Angular Material Bottom Sheet


this.bottomSheet.open(MyBottomSheetComponent);

94. Angular Material Tree


<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>{{ node.item }}</mat-tree-node>
</mat-tree>

95. Angular Material Tabs


<mat-tab-group>
<mat-tab label="Tab 1">Content 1</mat-tab>
<mat-tab label="Tab 2">Content 2</mat-tab>
</mat-tab-group>

96. Angular Material Stepper with Forms


<mat-horizontal-stepper>
<mat-step [stepControl]="firstFormGroup">
<form [formGroup]="firstFormGroup">
<ng-template matStepLabel>Step 1</ng-template>
<mat-form-field>
<input matInput placeholder="Input">
</mat-form-field>
<div>
<button mat-button matStepperNext>Next</button>
</div>
</form>
</mat-step>

97. Angular Material Datepicker with Form Control


<mat-form-field>
<input matInput [matDatepicker]="picker" formControlName="date">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>

98. Angular Material Datepicker with Custom Format


import { DateAdapter, MatDateFormats, MAT_DATE_FORMATS } from '@angular/material/core';

export const MY_DATE_FORMATS: MatDateFormats = {
parse: {
dateInput: 'DD/MM/YYYY',
},
display: {
dateInput: 'DD/MM/YYYY',
monthYearLabel: 'MMM YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM YYYY',
},
};

providers: [
{ provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS },
]

99. Angular Material Grid List with Responsive Layout


<mat-grid-list cols="2" rowHeight="2:1" gutterSize="10px">
<mat-grid-tile>Tile 1</mat-grid-tile>
<mat-grid-tile>Tile 2</mat-grid-tile>
</mat-grid-list>

100. Angular Material Theming


@import '~@angular/material/theming';
@include mat-core();
$primary: mat-palette($mat-indigo);
$accent: mat-palette($mat-pink);
$theme: mat-light-theme($primary, $accent);
@include angular-material-theme($theme);