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);