@@ -43,6 +43,12 @@ class RouteManager extends React.Component<RouteComponentProps, RouteManagerStat
43
43
}
44
44
}
45
45
46
+ componentWillUnmount ( ) {
47
+ if ( this . listenUnregisterCallback ) {
48
+ this . listenUnregisterCallback ( ) ;
49
+ }
50
+ }
51
+
46
52
hideView ( viewId : string ) {
47
53
const viewStacks = Object . assign ( new ViewStacks ( ) , this . state . viewStacks ) ;
48
54
const { view } = viewStacks . findViewInfoById ( viewId ) ;
@@ -97,17 +103,16 @@ class RouteManager extends React.Component<RouteComponentProps, RouteManagerStat
97
103
enteringView . prevId = enteringView . prevId || leavingView . id ;
98
104
} else {
99
105
direction = direction || 'back' ;
100
- leavingView . mount = false ;
101
106
}
102
- } else if ( action === 'REPLACE' ) {
103
- leavingView . mount = false ;
104
107
}
105
108
}
109
+ this . removeOrphanedViews ( enteringView , enteringViewStack ) ;
106
110
} else {
107
111
enteringView . show = true ;
108
112
enteringView . mount = true ;
109
113
enteringView . routeData . match = match ! ;
110
114
}
115
+
111
116
} ) ;
112
117
113
118
if ( leavingView ) {
@@ -140,10 +145,20 @@ class RouteManager extends React.Component<RouteComponentProps, RouteManagerStat
140
145
} ) ;
141
146
}
142
147
143
- componentWillUnmount ( ) {
144
- if ( this . listenUnregisterCallback ) {
145
- this . listenUnregisterCallback ( ) ;
146
- }
148
+ removeOrphanedViews ( view : ViewItem , viewStack : ViewStack ) {
149
+ const viewsToRemove = viewStack . views . filter ( v => v . prevId === view . id ) ;
150
+ viewsToRemove . forEach ( v => {
151
+ this . removeOrphanedViews ( v , viewStack ) ;
152
+ // If view is not currently visible, go ahead and remove it from DOM
153
+ if ( v . ionPageElement ! . classList . contains ( 'ion-page-hidden' ) ) {
154
+ v . show = false ;
155
+ v . ionPageElement = undefined ;
156
+ v . isIonRoute = false ;
157
+ v . prevId = undefined ;
158
+ v . key = generateId ( ) ;
159
+ }
160
+ v . mount = false ;
161
+ } ) ;
147
162
}
148
163
149
164
async setupIonRouter ( id : string , children : any , routerOutlet : HTMLIonRouterOutletElement ) {
0 commit comments