File

src/utils/event.service.ts

Index

Properties
Methods

Constructor

constructor(documentService: DocumentService)
Parameters :
Name Type Optional
documentService DocumentService No

Methods

ngOnDestroy
ngOnDestroy()
Returns : void
on
on(targetElement: HTMLElement | Element, eventType: string, callback: EventHandler)
Parameters :
Name Type Optional
targetElement HTMLElement | Element No
eventType string No
callback EventHandler No
Returns : void
onDocument
onDocument(eventType: string, callback: EventHandler)
Parameters :
Name Type Optional
eventType string No
callback EventHandler No
Returns : void

Properties

Protected subscriptions
Default value : new Subscription()
Protected targets
Default value : new WeakMap<HTMLElement | Element | Document, Map<string, Observable<Event>>>()
import { Injectable, OnDestroy } from "@angular/core";
import { Observable, Subscription } from "rxjs";
import { DocumentService } from "./document.service";
import { EventHandler } from "./types";
import { getEventObservable } from "./event-observable";

@Injectable()
export class EventService implements OnDestroy {
	protected subscriptions = new Subscription();

	protected targets = new WeakMap<HTMLElement | Element | Document, Map<string, Observable<Event>>>();

	constructor(protected documentService: DocumentService) {}

	on(targetElement: HTMLElement | Element, eventType: string, callback: EventHandler) {
		if (!this.targets.has(targetElement)) {
			this.targets.set(targetElement, new Map());
		}

		const eventMap = this.targets.get(targetElement);

		if (!eventMap.has(eventType)) {
			eventMap.set(eventType, getEventObservable(targetElement, eventType));
		}

		const subscription = eventMap.get(eventType).subscribe(callback);
		this.subscriptions.add(subscription);
	}

	onDocument(eventType: string, callback: EventHandler) {
		this.documentService.handleEvent(eventType, callback);
	}

	ngOnDestroy() {
		this.subscriptions.unsubscribe();
	}
}

results matching ""

    No results matching ""