UNPKG

@ngrx/component

Version:

Reactive Extensions for Angular Components

71 lines (70 loc) 2.13 kB
import { ChangeDetectorRef } from '@angular/core'; import { TickScheduler } from './tick-scheduler'; import * as i0 from "@angular/core"; /** * Provides rendering functionality regardless of whether `zone.js` is present * or not. It must be provided at the component/directive level. * * @usageNotes * * ### Rerender zone-less app on route changes * * ```ts * @Component({ * selector: 'app-root', * template: '<router-outlet>', * // 👇 `RenderScheduler` is provided at the component level * providers: [RenderScheduler], * changeDetection: ChangeDetectionStrategy.OnPush, * }) * export class AppComponent implements OnInit { * constructor( * private readonly router: Router, * private readonly renderScheduler: RenderScheduler * ) {} * * ngOnInit(): void { * this.router.events * .pipe(filter((e) => e instanceof NavigationEnd)) * .subscribe(() => this.renderScheduler.schedule()); * } * } * ``` * * ### Rerender component on interval * * ```ts * @Component({ * selector: 'app-interval', * template: '{{ elapsedTime }}ms', * // 👇 `RenderScheduler` is provided at the component level * providers: [RenderScheduler], * changeDetection: ChangeDetectionStrategy.OnPush, * }) * export class IntervalComponent implements OnInit { * elapsedTime = 0; * * constructor(private readonly renderScheduler: RenderScheduler) {} * * ngOnInit(): void { * setInterval(() => { * this.elapsedTime += 1000; * this.renderScheduler.schedule(); * }, 1000); * } * } * ``` */ export declare class RenderScheduler { private readonly cdRef; private readonly tickScheduler; constructor(cdRef: ChangeDetectorRef, tickScheduler: TickScheduler); /** * Marks component and its ancestors as dirty. * It also schedules a new change detection cycle in zone-less mode. */ schedule(): void; static ɵfac: i0.ɵɵFactoryDeclaration<RenderScheduler, never>; static ɵprov: i0.ɵɵInjectableDeclaration<RenderScheduler>; } export declare function createRenderScheduler(): RenderScheduler;