From 76169448259e92ed9a4938941c2691e944fd2508 Mon Sep 17 00:00:00 2001 From: Liam DeBeasi Date: Fri, 17 May 2019 15:46:57 -0400 Subject: [PATCH 1/3] fix(angular): preserve NavigationExtras on back --- .../src/directives/navigation/ion-router-outlet.ts | 14 ++++++++++++++ .../src/directives/navigation/stack-controller.ts | 2 +- angular/src/directives/navigation/stack-utils.ts | 1 + angular/src/providers/nav-controller.ts | 11 ++++++++++- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/angular/src/directives/navigation/ion-router-outlet.ts b/angular/src/directives/navigation/ion-router-outlet.ts index a95e45d2329..e7ceac8faaf 100644 --- a/angular/src/directives/navigation/ion-router-outlet.ts +++ b/angular/src/directives/navigation/ion-router-outlet.ts @@ -141,6 +141,20 @@ export class IonRouterOutlet implements OnDestroy, OnInit { if (this.activated) { if (this.activatedView) { this.activatedView.savedData = new Map(this.getContext()!.children['contexts']); + + /** + * Ensure we are saving the NavigationExtras + * data otherwise it will be lost + */ + this.activatedView.savedExtras = {}; + const context = this.getContext()!; + + if (context.route) { + const contextSnapshot = context.route.snapshot; + + this.activatedView.savedExtras.queryParams = contextSnapshot.queryParams; + this.activatedView.savedExtras.queryParams = contextSnapshot.fragment; + } } const c = this.component; this.activatedView = null; diff --git a/angular/src/directives/navigation/stack-controller.ts b/angular/src/directives/navigation/stack-controller.ts index a06eb0491ca..ebafaf9bf86 100644 --- a/angular/src/directives/navigation/stack-controller.ts +++ b/angular/src/directives/navigation/stack-controller.ts @@ -132,7 +132,7 @@ export class StackController { } } - return this.navCtrl.navigateBack(url).then(() => true); + return this.navCtrl.navigateBack(url, view.savedExtras).then(() => true); }); } diff --git a/angular/src/directives/navigation/stack-utils.ts b/angular/src/directives/navigation/stack-utils.ts index cf380e5d7b2..139eaf0ecdc 100644 --- a/angular/src/directives/navigation/stack-utils.ts +++ b/angular/src/directives/navigation/stack-utils.ts @@ -94,5 +94,6 @@ export interface RouteView { element: HTMLElement; ref: ComponentRef; savedData?: any; + savedExtras?: any; unlistenEvents: () => void; } diff --git a/angular/src/providers/nav-controller.ts b/angular/src/providers/nav-controller.ts index 7fb4cb21a74..def3c2b63d5 100644 --- a/angular/src/providers/nav-controller.ts +++ b/angular/src/providers/nav-controller.ts @@ -184,7 +184,16 @@ export class NavController { if (Array.isArray(url)) { return this.router!.navigate(url, options); } else { - return this.router!.navigateByUrl(url, options); + + /** + * navigateByUrl ignores any properties that + * would change the url, so things like queryParams + * would be ignored unless we create a url tree + * More Info: https://github.com/angular/angular/issues/18798 + */ + return this.router!.navigateByUrl( + this.router!.createUrlTree([url], options) + ); } } } From 17be0350a9577a6350d60200c84040e463e1ac61 Mon Sep 17 00:00:00 2001 From: Liam DeBeasi Date: Fri, 17 May 2019 15:52:29 -0400 Subject: [PATCH 2/3] fix savedExtras type --- angular/src/directives/navigation/stack-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/angular/src/directives/navigation/stack-utils.ts b/angular/src/directives/navigation/stack-utils.ts index 139eaf0ecdc..f52c5b36bb9 100644 --- a/angular/src/directives/navigation/stack-utils.ts +++ b/angular/src/directives/navigation/stack-utils.ts @@ -1,5 +1,5 @@ import { ComponentRef } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, NavigationExtras, Router } from '@angular/router'; import { NavDirection, RouterDirection } from '@ionic/core'; export function insertView(views: RouteView[], view: RouteView, direction: RouterDirection) { @@ -94,6 +94,6 @@ export interface RouteView { element: HTMLElement; ref: ComponentRef; savedData?: any; - savedExtras?: any; + savedExtras?: NavigationExtras; unlistenEvents: () => void; } From 750fc718aca4ef3271b22b6e98f4c27125733c10 Mon Sep 17 00:00:00 2001 From: Liam DeBeasi Date: Fri, 17 May 2019 15:53:08 -0400 Subject: [PATCH 3/3] fix typo --- angular/src/directives/navigation/ion-router-outlet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular/src/directives/navigation/ion-router-outlet.ts b/angular/src/directives/navigation/ion-router-outlet.ts index e7ceac8faaf..32d88842a06 100644 --- a/angular/src/directives/navigation/ion-router-outlet.ts +++ b/angular/src/directives/navigation/ion-router-outlet.ts @@ -153,7 +153,7 @@ export class IonRouterOutlet implements OnDestroy, OnInit { const contextSnapshot = context.route.snapshot; this.activatedView.savedExtras.queryParams = contextSnapshot.queryParams; - this.activatedView.savedExtras.queryParams = contextSnapshot.fragment; + this.activatedView.savedExtras.fragment = contextSnapshot.fragment; } } const c = this.component;