mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-22 13:32:54 +08:00
test(modal): adds canLeave test
This commit is contained in:
@ -130,6 +130,8 @@ export class E2EPage {
|
|||||||
</ion-item>
|
</ion-item>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
<button ion-button full (click)="submit()">Submit</button>
|
<button ion-button full (click)="submit()">Submit</button>
|
||||||
|
<p>ionViewCanEnter ({{called.ionViewCanEnter}})</p>
|
||||||
|
<p>ionViewCanLeave ({{called.ionViewCanLeave}})</p>
|
||||||
<p>ionViewDidLoad ({{called.ionViewDidLoad}})</p>
|
<p>ionViewDidLoad ({{called.ionViewDidLoad}})</p>
|
||||||
<p>ionViewWillEnter ({{called.ionViewWillEnter}})</p>
|
<p>ionViewWillEnter ({{called.ionViewWillEnter}})</p>
|
||||||
<p>ionViewDidEnter ({{called.ionViewDidEnter}})</p>
|
<p>ionViewDidEnter ({{called.ionViewDidEnter}})</p>
|
||||||
@ -146,6 +148,7 @@ export class ModalPassData {
|
|||||||
constructor(
|
constructor(
|
||||||
public viewCtrl: ViewController,
|
public viewCtrl: ViewController,
|
||||||
public toastCtrl: ToastController,
|
public toastCtrl: ToastController,
|
||||||
|
public alertCtrl: AlertController,
|
||||||
params: NavParams,
|
params: NavParams,
|
||||||
someComponentProvider: SomeComponentProvider,
|
someComponentProvider: SomeComponentProvider,
|
||||||
someAppProvider: SomeAppProvider) {
|
someAppProvider: SomeAppProvider) {
|
||||||
@ -156,6 +159,8 @@ export class ModalPassData {
|
|||||||
console.log('SomeAppProvider Data', someAppProvider.getData());
|
console.log('SomeAppProvider Data', someAppProvider.getData());
|
||||||
|
|
||||||
this.called = {
|
this.called = {
|
||||||
|
ionViewCanEnter: 0,
|
||||||
|
ionViewCanLeave: 0,
|
||||||
ionViewDidLoad: 0,
|
ionViewDidLoad: 0,
|
||||||
ionViewWillEnter: 0,
|
ionViewWillEnter: 0,
|
||||||
ionViewDidEnter: 0,
|
ionViewDidEnter: 0,
|
||||||
@ -166,7 +171,29 @@ export class ModalPassData {
|
|||||||
|
|
||||||
submit() {
|
submit() {
|
||||||
console.time('modal');
|
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() {
|
ionViewDidLoad() {
|
||||||
@ -360,6 +387,8 @@ export class ContactUs {
|
|||||||
<p>
|
<p>
|
||||||
<button ion-button (click)="openActionSheet()">Open Action Sheet</button>
|
<button ion-button (click)="openActionSheet()">Open Action Sheet</button>
|
||||||
</p>
|
</p>
|
||||||
|
<p>ionViewCanEnter ({{called.ionViewCanEnter}})</p>
|
||||||
|
<p>ionViewCanLeave ({{called.ionViewCanLeave}})</p>
|
||||||
<p>ionViewDidLoad ({{called.ionViewDidLoad}})</p>
|
<p>ionViewDidLoad ({{called.ionViewDidLoad}})</p>
|
||||||
<p>ionViewWillEnter ({{called.ionViewWillEnter}})</p>
|
<p>ionViewWillEnter ({{called.ionViewWillEnter}})</p>
|
||||||
<p>ionViewDidEnter ({{called.ionViewDidEnter}})</p>
|
<p>ionViewDidEnter ({{called.ionViewDidEnter}})</p>
|
||||||
@ -391,6 +420,8 @@ export class ModalFirstPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.called = {
|
this.called = {
|
||||||
|
ionViewCanEnter: 0,
|
||||||
|
ionViewCanLeave: 0,
|
||||||
ionViewDidLoad: 0,
|
ionViewDidLoad: 0,
|
||||||
ionViewWillEnter: 0,
|
ionViewWillEnter: 0,
|
||||||
ionViewDidEnter: 0,
|
ionViewDidEnter: 0,
|
||||||
@ -410,6 +441,18 @@ export class ModalFirstPage {
|
|||||||
this.navCtrl.parent.pop();
|
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() {
|
ionViewDidLoad() {
|
||||||
console.log('ModalFirstPage ionViewDidLoad fired');
|
console.log('ModalFirstPage ionViewDidLoad fired');
|
||||||
this.called.ionViewDidLoad++;
|
this.called.ionViewDidLoad++;
|
||||||
|
@ -38,21 +38,19 @@ export class NavControllerBase extends Ion implements NavController {
|
|||||||
_viewport: ViewContainerRef;
|
_viewport: ViewContainerRef;
|
||||||
_views: ViewController[] = [];
|
_views: ViewController[] = [];
|
||||||
|
|
||||||
viewDidLoad: EventEmitter<any>;
|
viewDidLoad: EventEmitter<any> = new EventEmitter();
|
||||||
viewWillEnter: EventEmitter<any>;
|
viewWillEnter: EventEmitter<any> = new EventEmitter();
|
||||||
viewDidEnter: EventEmitter<any>;
|
viewDidEnter: EventEmitter<any> = new EventEmitter();
|
||||||
viewWillLeave: EventEmitter<any>;
|
viewWillLeave: EventEmitter<any> = new EventEmitter();
|
||||||
viewDidLeave: EventEmitter<any>;
|
viewDidLeave: EventEmitter<any> = new EventEmitter();
|
||||||
viewWillUnload: EventEmitter<any>;
|
viewWillUnload: EventEmitter<any> = new EventEmitter();
|
||||||
|
|
||||||
id: string;
|
id: string;
|
||||||
parent: any;
|
|
||||||
config: Config;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
parent: any,
|
public parent: any,
|
||||||
public _app: App,
|
public _app: App,
|
||||||
config: Config,
|
public config: Config,
|
||||||
public _keyboard: Keyboard,
|
public _keyboard: Keyboard,
|
||||||
elementRef: ElementRef,
|
elementRef: ElementRef,
|
||||||
public _zone: NgZone,
|
public _zone: NgZone,
|
||||||
@ -64,20 +62,10 @@ export class NavControllerBase extends Ion implements NavController {
|
|||||||
) {
|
) {
|
||||||
super(config, elementRef, renderer);
|
super(config, elementRef, renderer);
|
||||||
|
|
||||||
this.parent = parent;
|
|
||||||
this.config = config;
|
|
||||||
|
|
||||||
this._sbEnabled = config.getBoolean('swipeBackEnabled');
|
this._sbEnabled = config.getBoolean('swipeBackEnabled');
|
||||||
this._sbThreshold = config.getNumber('swipeBackThreshold', 40);
|
this._sbThreshold = config.getNumber('swipeBackThreshold', 40);
|
||||||
|
|
||||||
this.id = 'n' + (++ctrlIds);
|
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<any> {
|
push(page: any, params?: any, opts?: NavOptions, done?: Function): Promise<any> {
|
||||||
@ -280,7 +268,8 @@ export class NavControllerBase extends Ion implements NavController {
|
|||||||
return this._viewTest(enteringView, leavingView, ti);
|
return this._viewTest(enteringView, leavingView, ti);
|
||||||
|
|
||||||
} else {
|
} 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;
|
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 opts = ti.opts || {};
|
||||||
|
|
||||||
const insertViews = ti.insertViews;
|
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 immediately because there's no animation that's happening
|
||||||
resolve(true, false);
|
resolve(true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -447,7 +434,7 @@ export class NavControllerBase extends Ion implements NavController {
|
|||||||
enteringView._state = ViewState.INITIALIZED;
|
enteringView._state = ViewState.INITIALIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
_viewTest(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction): boolean {
|
_viewTest(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction) {
|
||||||
const promises: Promise<any>[] = [];
|
const promises: Promise<any>[] = [];
|
||||||
const reject = ti.reject;
|
const reject = ti.reject;
|
||||||
const resolve = ti.resolve;
|
const resolve = ti.resolve;
|
||||||
@ -490,20 +477,16 @@ export class NavControllerBase extends Ion implements NavController {
|
|||||||
// all promises resolved! let's continue
|
// all promises resolved! let's continue
|
||||||
this._postViewInit(enteringView, leavingView, ti, resolve);
|
this._postViewInit(enteringView, leavingView, ti, resolve);
|
||||||
|
|
||||||
}).catch((rejectReason) => {
|
}).catch(reject);
|
||||||
reject(rejectReason);
|
return true;
|
||||||
});
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// synchronous and all tests passed! let's move on already
|
// synchronous and all tests passed! let's move on already
|
||||||
this._postViewInit(enteringView, leavingView, ti, resolve);
|
this._postViewInit(enteringView, leavingView, ti, resolve);
|
||||||
|
|
||||||
return true;
|
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
|
// figure out if this transition is the root one or a
|
||||||
// child of a parent nav that has the root transition
|
// child of a parent nav that has the root transition
|
||||||
this._trnsId = this._trnsCtrl.getRootTrnsId(this);
|
this._trnsId = this._trnsCtrl.getRootTrnsId(this);
|
||||||
|
Reference in New Issue
Block a user