diff --git a/packages/angular/src/index.ts b/packages/angular/src/index.ts index e2d7c192ad..afe46d2c02 100644 --- a/packages/angular/src/index.ts +++ b/packages/angular/src/index.ts @@ -7,6 +7,7 @@ export { IonNavDelegate } from './components/ion-nav'; export { ActionSheetController, ActionSheetProxy } from './providers/action-sheet-controller'; export { AlertController, AlertProxy } from './providers/alert-controller'; export { App } from './providers/app'; +export { Events } from './providers/events'; export { LoadingController, LoadingProxy } from './providers/loading-controller'; export { ModalController, ModalProxy } from './providers/modal-controller'; export { NavController } from './providers/nav-controller'; diff --git a/packages/angular/src/module.ts b/packages/angular/src/module.ts index f79160907f..618f1ea0cd 100644 --- a/packages/angular/src/module.ts +++ b/packages/angular/src/module.ts @@ -19,6 +19,7 @@ import { IonNavDelegate } from './components/ion-nav'; import { ActionSheetController } from './providers/action-sheet-controller'; import { AlertController } from './providers/alert-controller'; import { AngularComponentMounter } from './providers/angular-component-mounter'; +import { Events } from './providers/events'; import { LoadingController } from './providers/loading-controller'; import { ModalController } from './providers/modal-controller'; import { PopoverController } from './providers/popover-controller'; @@ -56,6 +57,7 @@ export class IonicAngularModule { AlertController, ActionSheetController, AngularComponentMounter, + Events, LoadingController, ModalController, PopoverController, diff --git a/packages/angular/src/providers/events.ts b/packages/angular/src/providers/events.ts new file mode 100644 index 0000000000..9a465f8098 --- /dev/null +++ b/packages/angular/src/providers/events.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core'; + +import { ensureElementInBody, hydrateElement } from '../util/util'; + +let hydratedElement: HTMLIonEventsElement = null; + +@Injectable() +export class Events { + + publish(topic: string, event?: any): Promise { + return getElement().then((element: HTMLIonEventsElement) => { + return element.publish(topic, event); + }); + } + + subscribe(topic: string, handler: (event?: any) => void) { + return getElement().then((element: HTMLIonEventsElement) => { + return element.subscribe(topic, handler); + }); + } +} +function getElement(): Promise { + if (hydratedElement) { + return Promise.resolve(hydratedElement); + } + const element = ensureElementInBody(ELEMENT_NAME); + return hydrateElement(element).then((element: HTMLIonEventsElement) => { + hydratedElement = element; + return element; + }); +} + +const ELEMENT_NAME = 'ion-events'; \ No newline at end of file