mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-19 03:32:21 +08:00
@ -43,6 +43,12 @@ class RouteManager extends React.Component<RouteComponentProps, RouteManagerStat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
if (this.listenUnregisterCallback) {
|
||||||
|
this.listenUnregisterCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
hideView(viewId: string) {
|
hideView(viewId: string) {
|
||||||
const viewStacks = Object.assign(new ViewStacks(), this.state.viewStacks);
|
const viewStacks = Object.assign(new ViewStacks(), this.state.viewStacks);
|
||||||
const { view } = viewStacks.findViewInfoById(viewId);
|
const { view } = viewStacks.findViewInfoById(viewId);
|
||||||
@ -97,17 +103,16 @@ class RouteManager extends React.Component<RouteComponentProps, RouteManagerStat
|
|||||||
enteringView.prevId = enteringView.prevId || leavingView.id;
|
enteringView.prevId = enteringView.prevId || leavingView.id;
|
||||||
} else {
|
} else {
|
||||||
direction = direction || 'back';
|
direction = direction || 'back';
|
||||||
leavingView.mount = false;
|
|
||||||
}
|
|
||||||
} else if (action === 'REPLACE') {
|
|
||||||
leavingView.mount = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
this.removeOrphanedViews(enteringView, enteringViewStack);
|
||||||
} else {
|
} else {
|
||||||
enteringView.show = true;
|
enteringView.show = true;
|
||||||
enteringView.mount = true;
|
enteringView.mount = true;
|
||||||
enteringView.routeData.match = match!;
|
enteringView.routeData.match = match!;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (leavingView) {
|
if (leavingView) {
|
||||||
@ -140,10 +145,20 @@ class RouteManager extends React.Component<RouteComponentProps, RouteManagerStat
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
removeOrphanedViews(view: ViewItem, viewStack: ViewStack) {
|
||||||
if (this.listenUnregisterCallback) {
|
const viewsToRemove = viewStack.views.filter(v => v.prevId === view.id);
|
||||||
this.listenUnregisterCallback();
|
viewsToRemove.forEach(v => {
|
||||||
|
this.removeOrphanedViews(v, viewStack);
|
||||||
|
// If view is not currently visible, go ahead and remove it from DOM
|
||||||
|
if (v.ionPageElement!.classList.contains('ion-page-hidden')) {
|
||||||
|
v.show = false;
|
||||||
|
v.ionPageElement = undefined;
|
||||||
|
v.isIonRoute = false;
|
||||||
|
v.prevId = undefined;
|
||||||
|
v.key = generateId();
|
||||||
}
|
}
|
||||||
|
v.mount = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async setupIonRouter(id: string, children: any, routerOutlet: HTMLIonRouterOutletElement) {
|
async setupIonRouter(id: string, children: any, routerOutlet: HTMLIonRouterOutletElement) {
|
||||||
|
@ -85,16 +85,4 @@ export class ViewStacks {
|
|||||||
return { view, viewStack };
|
return { view, viewStack };
|
||||||
}
|
}
|
||||||
|
|
||||||
setHiddenViews() {
|
|
||||||
const keys = this.getKeys();
|
|
||||||
keys.forEach(key => {
|
|
||||||
const viewStack = this.viewStacks[key];
|
|
||||||
viewStack!.views.forEach(view => {
|
|
||||||
if (!view.routeData.match && !view.isIonRoute) {
|
|
||||||
view.show = false;
|
|
||||||
view.mount = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user