mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-19 19:57:22 +08:00
feature(events): add events api to angular package
This commit is contained in:
@ -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';
|
||||
|
@ -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,
|
||||
|
33
packages/angular/src/providers/events.ts
Normal file
33
packages/angular/src/providers/events.ts
Normal file
@ -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<any> {
|
||||
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<HTMLIonEventsElement> {
|
||||
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';
|
Reference in New Issue
Block a user