@ngrx/component
Version:
Reactive Extensions for Angular Components
71 lines (70 loc) • 2.13 kB
TypeScript
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;