diff --git a/src/components/modal/test/basic/app-module.ts b/src/components/modal/test/basic/app-module.ts
index 557a0e80a6..5ddd350779 100644
--- a/src/components/modal/test/basic/app-module.ts
+++ b/src/components/modal/test/basic/app-module.ts
@@ -130,6 +130,8 @@ export class E2EPage {
+
ionViewCanEnter ({{called.ionViewCanEnter}})
+ ionViewCanLeave ({{called.ionViewCanLeave}})
ionViewDidLoad ({{called.ionViewDidLoad}})
ionViewWillEnter ({{called.ionViewWillEnter}})
ionViewDidEnter ({{called.ionViewDidEnter}})
@@ -146,6 +148,7 @@ export class ModalPassData {
constructor(
public viewCtrl: ViewController,
public toastCtrl: ToastController,
+ public alertCtrl: AlertController,
params: NavParams,
someComponentProvider: SomeComponentProvider,
someAppProvider: SomeAppProvider) {
@@ -156,6 +159,8 @@ export class ModalPassData {
console.log('SomeAppProvider Data', someAppProvider.getData());
this.called = {
+ ionViewCanEnter: 0,
+ ionViewCanLeave: 0,
ionViewDidLoad: 0,
ionViewWillEnter: 0,
ionViewDidEnter: 0,
@@ -166,7 +171,29 @@ export class ModalPassData {
submit() {
console.time('modal');
- this.viewCtrl.dismiss(this.data);
+ this.viewCtrl.dismiss(this.data).catch(() => {
+ console.log('submit was cancelled');
+ });
+ }
+
+ ionViewCanEnter() {
+ console.log('ModalPassData ionViewCanEnter fired');
+ this.called.ionViewCanEnter++;
+
+ return true;
+ }
+
+ ionViewCanLeave() {
+ console.log('ModalPassData ionViewCanLeave fired');
+ this.called.ionViewCanLeave++;
+
+ return new Promise((resolve: any, reject: any) => {
+ let alert = this.alertCtrl.create();
+ alert.setTitle('Do you want to submit?');
+ alert.addButton({ text: 'Submit', handler: resolve });
+ alert.addButton({ text: 'Cancel', role: 'cancel', handler: reject });
+ alert.present();
+ });
}
ionViewDidLoad() {
@@ -360,6 +387,8 @@ export class ContactUs {
+ ionViewCanEnter ({{called.ionViewCanEnter}})
+ ionViewCanLeave ({{called.ionViewCanLeave}})
ionViewDidLoad ({{called.ionViewDidLoad}})
ionViewWillEnter ({{called.ionViewWillEnter}})
ionViewDidEnter ({{called.ionViewDidEnter}})
@@ -391,6 +420,8 @@ export class ModalFirstPage {
}
this.called = {
+ ionViewCanEnter: 0,
+ ionViewCanLeave: 0,
ionViewDidLoad: 0,
ionViewWillEnter: 0,
ionViewDidEnter: 0,
@@ -410,6 +441,18 @@ export class ModalFirstPage {
this.navCtrl.parent.pop();
}
+ ionViewCanEnter() {
+ console.log('ModalFirstPage ionViewCanEnter fired');
+ this.called.ionViewCanEnter++;
+ return true;
+ }
+
+ ionViewCanLeave() {
+ console.log('ModalFirstPage ionViewCanLeave fired');
+ this.called.ionViewCanLeave++;
+ return true;
+ }
+
ionViewDidLoad() {
console.log('ModalFirstPage ionViewDidLoad fired');
this.called.ionViewDidLoad++;
diff --git a/src/navigation/nav-controller-base.ts b/src/navigation/nav-controller-base.ts
index 7adeaf9e15..daa97b16b7 100644
--- a/src/navigation/nav-controller-base.ts
+++ b/src/navigation/nav-controller-base.ts
@@ -38,21 +38,19 @@ export class NavControllerBase extends Ion implements NavController {
_viewport: ViewContainerRef;
_views: ViewController[] = [];
- viewDidLoad: EventEmitter;
- viewWillEnter: EventEmitter;
- viewDidEnter: EventEmitter;
- viewWillLeave: EventEmitter;
- viewDidLeave: EventEmitter;
- viewWillUnload: EventEmitter;
+ viewDidLoad: EventEmitter = new EventEmitter();
+ viewWillEnter: EventEmitter = new EventEmitter();
+ viewDidEnter: EventEmitter = new EventEmitter();
+ viewWillLeave: EventEmitter = new EventEmitter();
+ viewDidLeave: EventEmitter = new EventEmitter();
+ viewWillUnload: EventEmitter = new EventEmitter();
id: string;
- parent: any;
- config: Config;
constructor(
- parent: any,
+ public parent: any,
public _app: App,
- config: Config,
+ public config: Config,
public _keyboard: Keyboard,
elementRef: ElementRef,
public _zone: NgZone,
@@ -64,20 +62,10 @@ export class NavControllerBase extends Ion implements NavController {
) {
super(config, elementRef, renderer);
- this.parent = parent;
- this.config = config;
-
this._sbEnabled = config.getBoolean('swipeBackEnabled');
this._sbThreshold = config.getNumber('swipeBackThreshold', 40);
this.id = 'n' + (++ctrlIds);
-
- this.viewDidLoad = new EventEmitter();
- this.viewWillEnter = new EventEmitter();
- this.viewDidEnter = new EventEmitter();
- this.viewWillLeave = new EventEmitter();
- this.viewDidLeave = new EventEmitter();
- this.viewWillUnload = new EventEmitter();
}
push(page: any, params?: any, opts?: NavOptions, done?: Function): Promise {
@@ -280,7 +268,8 @@ export class NavControllerBase extends Ion implements NavController {
return this._viewTest(enteringView, leavingView, ti);
} else {
- return this._postViewInit(enteringView, leavingView, ti, ti.resolve);
+ this._postViewInit(enteringView, leavingView, ti, ti.resolve);
+ return true;
}
}
@@ -334,7 +323,7 @@ export class NavControllerBase extends Ion implements NavController {
return null;
}
- _postViewInit(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction, resolve: TransitionResolveFn): boolean {
+ _postViewInit(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction, resolve: TransitionResolveFn) {
const opts = ti.opts || {};
const insertViews = ti.insertViews;
@@ -425,8 +414,6 @@ export class NavControllerBase extends Ion implements NavController {
// resolve immediately because there's no animation that's happening
resolve(true, false);
}
-
- return true;
}
/**
@@ -447,7 +434,7 @@ export class NavControllerBase extends Ion implements NavController {
enteringView._state = ViewState.INITIALIZED;
}
- _viewTest(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction): boolean {
+ _viewTest(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction) {
const promises: Promise[] = [];
const reject = ti.reject;
const resolve = ti.resolve;
@@ -490,20 +477,16 @@ export class NavControllerBase extends Ion implements NavController {
// all promises resolved! let's continue
this._postViewInit(enteringView, leavingView, ti, resolve);
- }).catch((rejectReason) => {
- reject(rejectReason);
- });
-
- return false;
+ }).catch(reject);
+ return true;
}
// synchronous and all tests passed! let's move on already
this._postViewInit(enteringView, leavingView, ti, resolve);
-
return true;
}
- _transition(enteringView: ViewController, leavingView: ViewController, opts: NavOptions, resolve: TransitionResolveFn): void {
+ _transition(enteringView: ViewController, leavingView: ViewController, opts: NavOptions, resolve: TransitionResolveFn) {
// figure out if this transition is the root one or a
// child of a parent nav that has the root transition
this._trnsId = this._trnsCtrl.getRootTrnsId(this);