@@ -26,7 +26,7 @@ import { Transition } from './transition';
26
26
27
27
import iosTransitionAnimation from './animations/ios.transition' ;
28
28
import mdTransitionAnimation from './animations/md.transition' ;
29
- import { RouteID } from '../router/utils/interfaces' ;
29
+ import { RouteID , RouteWrite } from '../router/utils/interfaces' ;
30
30
31
31
const TrnsCtrl = new TransitionController ( ) ;
32
32
@@ -203,17 +203,41 @@ export class NavControllerBase implements NavOutlet {
203
203
}
204
204
205
205
@Method ( )
206
- setRouteId ( id : string , params : any = { } , direction : number ) : Promise < boolean > {
206
+ setRouteId ( id : string , params : any = { } , direction : number ) : Promise < RouteWrite > {
207
207
const active = this . getActive ( ) ;
208
208
if ( active && active . component === id ) {
209
- return Promise . resolve ( false ) ;
209
+ return Promise . resolve ( { changed : false } ) ;
210
210
}
211
+
212
+ let resolve : ( result : RouteWrite ) => void ;
213
+ const promise = new Promise < RouteWrite > ( ( r ) => resolve = r ) ;
214
+
215
+ const commonOpts : NavOptions = {
216
+ viewIsReady : ( ) => {
217
+ let markVisible ;
218
+ const p = new Promise ( ( r ) => markVisible = r ) ;
219
+ resolve ( {
220
+ changed : true ,
221
+ markVisible
222
+ } ) ;
223
+ return p ;
224
+ }
225
+ } ;
226
+
211
227
if ( direction === 1 ) {
212
- return this . push ( id , params ) . then ( ( ) => true ) ;
213
- } else if ( direction === - 1 && this . canGoBack ( ) ) {
214
- return this . pop ( ) . then ( ( ) => true ) ;
228
+ this . push ( id , params , commonOpts ) ;
229
+ } else if ( direction === - 1 ) {
230
+ this . canGoBack ( )
231
+ ? this . pop ( commonOpts )
232
+ : this . setRoot ( id , params , {
233
+ ...commonOpts ,
234
+ direction : DIRECTION_BACK ,
235
+ animate : true
236
+ } ) ;
237
+ } else {
238
+ this . setRoot ( id , params , commonOpts ) ;
215
239
}
216
- return this . setRoot ( id , params ) . then ( ( ) => true ) ;
240
+ return promise ;
217
241
}
218
242
219
243
@Method ( )
@@ -340,9 +364,13 @@ export class NavControllerBase implements NavOutlet {
340
364
this . isTransitioning = false ;
341
365
// let's see if there's another to kick off
342
366
this . _nextTrns ( ) ;
343
- this . ionNavChanged . emit ( {
344
- isPop : result . direction === 'back'
345
- } ) ;
367
+ const router = document . querySelector ( 'ion-router' ) ;
368
+ const isPop = result . direction === DIRECTION_BACK ;
369
+ if ( router ) {
370
+ router . navChanged ( isPop ) ;
371
+ }
372
+
373
+ this . ionNavChanged . emit ( { isPop} ) ;
346
374
347
375
if ( ti . done ) {
348
376
ti . done (
@@ -425,15 +453,19 @@ export class NavControllerBase implements NavOutlet {
425
453
return true ;
426
454
}
427
455
428
- private _waitUntilReady ( enteringView : ViewController , leavingView : ViewController ) {
456
+ private _waitUntilReady ( enteringView : ViewController , leavingView : ViewController , ti : TransitionInstruction ) {
429
457
const promises = [ ] ;
430
458
if ( enteringView ) {
431
459
promises . push ( isReady ( enteringView . element ) ) ;
432
460
}
433
461
if ( leavingView ) {
434
462
promises . push ( isReady ( leavingView . element ) ) ;
435
463
}
436
- return Promise . all ( promises ) ;
464
+ const promise = Promise . all ( promises ) ;
465
+ if ( ti . opts . viewIsReady ) {
466
+ return promise . then ( ti . opts . viewIsReady ) ;
467
+ }
468
+ return promise ;
437
469
}
438
470
439
471
private _startTI ( ti : TransitionInstruction ) : Promise < void > {
@@ -690,7 +722,7 @@ export class NavControllerBase implements NavOutlet {
690
722
691
723
// transition start has to be registered before attaching the view to the DOM!
692
724
const promise = new Promise < void > ( resolve => transition . registerStart ( resolve ) )
693
- . then ( ( ) => this . _waitUntilReady ( enteringView , leavingView ) )
725
+ . then ( ( ) => this . _waitUntilReady ( enteringView , leavingView , ti ) )
694
726
. then ( ( ) => this . _transitionInit ( transition , enteringView , leavingView , opts ) )
695
727
. then ( ( ) => this . _transitionStart ( transition , enteringView , leavingView , opts ) ) ;
696
728
0 commit comments