/
githubmirror
/
angular
Обзор
Документация
Войти
/
githubmirror
/
angular
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/examples/common/pipes/ts/async_pipe.ts
78 строк
2 KB
Shuaib Hasan Akib
refactor(common): update pipe examples and remove redundant standalone flag (#64135)
30 сен 2025, 22:31
30 сен 2025, 22:31
7345bdc
Код
Авторство
О чём код?
/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ import {AsyncPipe} from '@angular/common'; import {Component} from '@angular/core'; import {Observable, Observer} from 'rxjs'; // #docregion AsyncPipePromise @Component({ selector: 'async-promise-pipe', imports: [AsyncPipe], template: `<div> <code>promise|async</code>: <button (click)="clicked()">{{ arrived ? 'Reset' : 'Resolve' }}</button> <span>Wait for it... {{ greeting | async }}</span> </div>`, }) export class AsyncPromisePipeComponent { greeting: Promise<string> | null = null; arrived: boolean = false; private resolve: Function | null = null; constructor() { this.reset(); } reset() { this.arrived = false; this.greeting = new Promise<string>((resolve, reject) => { this.resolve = resolve; }); } clicked() { if (this.arrived) { this.reset(); } else { this.resolve!('hi there!'); this.arrived = true; } } } // #enddocregion // #docregion AsyncPipeObservable @Component({ selector: 'async-observable-pipe', imports: [AsyncPipe], template: '<div><code>observable|async</code>: Time: {{ time | async }}</div>', }) export class AsyncObservablePipeComponent { time = new Observable<string>((observer: Observer<string>) => { setInterval(() => observer.next(new Date().toString()), 1000); }); } // #enddocregion // For some reason protractor hangs on setInterval. So we will run outside of angular zone so that // protractor will not see us. Also we want to have this outside the docregion so as not to confuse // the reader. function setInterval(fn: Function, delay: number) { const zone = (window as any)['Zone'].current; let rootZone = zone; while (rootZone.parent) { rootZone = rootZone.parent; } rootZone.run(() => { window.setInterval(function (this: unknown) { zone.run(fn, this, arguments as any); }, delay); }); }