Async Pipes
Async Pipes
// Component
import { Component, OnInit } from '@angular/core';
import { Observable, of } from 'rxjs';
@Component({
selector: 'app-example',
template: `
<h2>Data from Observable:</h2>
<p>{{ data$ | async }}</p>
`,
})
export class ExampleComponent implements OnInit {
data$: Observable<string>;
ngOnInit() {
this.data$ = of('Hello, Angular!');
}
}
Notes:
// Component
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Component({
selector: 'app-example',
template: `
<h2>Data from API:</h2>
<ul>
<li *ngFor="let item of items$ | async">{{ item.name }}</li>
</ul>
`,
})
export class ExampleComponent {
items$: Observable<any>;
// Component
import { Component } from '@angular/core';
@Component({
selector: 'app-example',
template: `
<h2>Data from Promise:</h2>
<p>{{ result$ | async }}</p>
`,
})
export class ExampleComponent {
result$: Promise<string>;
constructor() {
this.result$ = this.getData();
}
getData(): Promise<string> {
return new Promise(resolve => {
setTimeout(() => resolve('Async Pipe Example'), 2000);
});
}
}
Notes:
// Component
import { Component } from '@angular/core';
import { Observable, of } from 'rxjs';
@Component({
selector: 'app-example',
template: `
<h2>Show Data Conditionally:</h2>
<div *ngIf="data$ | async; else loading">
{{ data$ | async }}
</div>
<ng-template #loading>Loading...</ng-template>
`,
})
export class ExampleComponent {
data$: Observable<string>;
constructor() {
this.data$ = of('Conditionally Shown Data');
}
}
Notes:
The ngIf directive is used with the async pipe to conditionally show data or a
loading message.
Example 5: Chaining Async Operations
// Component
import { Component } from '@angular/core';
import { Observable, of } from 'rxjs';
import { delay, map } from 'rxjs/operators';
@Component({
selector: 'app-example',
template: `
<h2>Chaining Async Operations:</h2>
<p>{{ transformedData$ | async }}</p>
`,
})
export class ExampleComponent {
originalData$: Observable<number[]>;
transformedData$: Observable<string>;
constructor() {
this.originalData$ = of([1, 2, 3]).pipe(delay(1000));
this.transformedData$ = this.originalData$.pipe(
delay(1000),
map(data => data.map(item => item * 2).join(', '))
);
}
}
Notes: