Skip to content

Instantly share code, notes, and snippets.

@NetanelBasal
Created February 12, 2019 04:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NetanelBasal/d24d6eaec1c276a746e88fabf4edada8 to your computer and use it in GitHub Desktop.
Save NetanelBasal/d24d6eaec1c276a746e88fabf4edada8 to your computer and use it in GitHub Desktop.
@Injectable({
providedIn: "root"
})
export class DeferEventPlugin {
manager: EventManager;
supports(eventName: string): boolean {
return /debounce|throttle/.test(eventName);
}
addEventListener(
element,
eventName,
originalHandler
): Function {
const [name, method, miliseconds = 300] = eventName.split(".");
const innerHandler = event => this.manager.getZone().runGuarded(() => originalHandler(event));
let handler;
if (method === "debounce") {
handler = debounce(innerHandler, miliseconds);
} else {
handler = throttle(innerHandler, miliseconds);
}
this.manager.getZone().runOutsideAngular(() => {
element.addEventListener(name, handler);
});
return () => {
element.removeEventListener(name, handler);
handler = null;
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment