@@ -117,7 +117,7 @@ export class NavControllerBase extends Ion implements NavController {
117
117
} , done ) ;
118
118
}
119
119
120
- popAll ( ) {
120
+ popAll ( ) : Promise < any [ ] > {
121
121
let promises : any [ ] = [ ] ;
122
122
for ( var i = this . _views . length - 1 ; i >= 0 ; i -- ) {
123
123
promises . push ( this . pop ( null ) ) ;
@@ -133,6 +133,10 @@ export class NavControllerBase extends Ion implements NavController {
133
133
} , done ) ;
134
134
}
135
135
136
+ removeView ( viewController : ViewController , opts ?: NavOptions , done ?: Function ) : Promise < any > {
137
+ return this . remove ( this . indexOf ( viewController ) , 1 , opts , done ) ;
138
+ }
139
+
136
140
setRoot ( pageOrViewCtrl : any , params ?: any , opts ?: NavOptions , done ?: Function ) : Promise < any > {
137
141
let viewControllers = [ convertToView ( this . _linker , pageOrViewCtrl , params ) ] ;
138
142
return this . _setPages ( viewControllers , opts , done ) ;
@@ -330,15 +334,16 @@ export class NavControllerBase extends Ion implements NavController {
330
334
const opts = ti . opts || { } ;
331
335
const insertViews = ti . insertViews ;
332
336
const removeStart = ti . removeStart ;
333
- let view ;
334
- let destroyQueue : ViewController [ ] = [ ] ;
337
+ let view : ViewController ;
338
+ let i : number ;
339
+ let destroyQueue : ViewController [ ] ;
335
340
336
341
// there are views to remove
337
342
if ( isPresent ( removeStart ) ) {
338
343
assert ( removeStart >= 0 , 'removeStart can not be negative' ) ;
339
344
assert ( ti . removeCount >= 0 , 'removeCount can not be negative' ) ;
340
-
341
- for ( var i = 0 ; i < ti . removeCount ; i ++ ) {
345
+ destroyQueue = [ ] ;
346
+ for ( i = 0 ; i < ti . removeCount ; i ++ ) {
342
347
view = this . _views [ i + removeStart ] ;
343
348
if ( view && view !== enteringView && view !== leavingView ) {
344
349
destroyQueue . push ( view ) ;
@@ -356,7 +361,7 @@ export class NavControllerBase extends Ion implements NavController {
356
361
}
357
362
358
363
// add the views to the
359
- for ( var i = 0 ; i < insertViews . length ; i ++ ) {
364
+ for ( i = 0 ; i < insertViews . length ; i ++ ) {
360
365
view = insertViews [ i ] ;
361
366
this . _insertViewAt ( view , ti . insertStart + i ) ;
362
367
}
@@ -366,22 +371,26 @@ export class NavControllerBase extends Ion implements NavController {
366
371
opts . direction = opts . direction || DIRECTION_FORWARD ;
367
372
}
368
373
}
374
+
369
375
// if the views to be removed are in the beginning or middle
370
376
// and there is not a view that needs to visually transition out
371
377
// then just destroy them and don't transition anything
372
378
// batch all of lifecycles together
373
379
// let's make sure, callbacks are zoned
374
- this . _zone . run ( ( ) => {
375
- for ( view of destroyQueue ) {
376
- this . _willLeave ( view ) ;
377
- this . _didLeave ( view ) ;
378
- this . _willUnload ( view ) ;
379
- }
380
- } ) ;
380
+ if ( destroyQueue && destroyQueue . length > 0 ) {
381
+ this . _zone . run ( ( ) => {
382
+ for ( i = 0 ; i < destroyQueue . length ; i ++ ) {
383
+ view = destroyQueue [ i ] ;
384
+ this . _willLeave ( view ) ;
385
+ this . _didLeave ( view ) ;
386
+ this . _willUnload ( view ) ;
387
+ }
388
+ } ) ;
381
389
382
- // once all lifecycle events has been delivered, we can safely detroy the views
383
- for ( view of destroyQueue ) {
384
- this . _destroyView ( view ) ;
390
+ // once all lifecycle events has been delivered, we can safely detroy the views
391
+ for ( i = 0 ; i < destroyQueue . length ; i ++ ) {
392
+ this . _destroyView ( destroyQueue [ i ] ) ;
393
+ }
385
394
}
386
395
387
396
if ( ti . enteringRequiresTransition || ti . leavingRequiresTransition && enteringView !== leavingView ) {
0 commit comments