Reputation: 253
I'm upgrading my Ionic 3 project to the latest Ionic 4 and I have some trouble with Routing. In Ionic 3 I used setRoot just like this:
handler: () => navCtrl.parent.parent.setRoot(HomePage, 'logout', {animate: true})
The latest navCtrl of Ionic 4 has only goBack, goForward and goRoot, and I don't understand how to use parent. I found ActivatedRoute in Angular, but I don't think this is the right way. How can I do?
Upvotes: 23
Views: 34966
Reputation: 321
In Ionic 5 with Angular Routing
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
...
})
export class LoginComponent {
constructor(private router: Router) {}
navigate() {
this.router.navigate(['/detail'])
}
}
Upvotes: 0
Reputation: 2401
You can setRoot without using angular's router. This code works in Ionic 4
import { NavController } from '@ionic/angular';
constructor(private navCtrl: NavController) {
}
navigateRoot(url: string | UrlTree | any[], options?: NavigationOptions): Promise;
this.navCtrl.navigateRoot('/app/profile');
or if you want forward/back
animation:
this.navCtrl.navigateRoot('/authentication', { animationDirection: 'forward' });
setDirection(direction: RouterDirection, animated?: boolean, animationDirection?: 'forward' | 'back'): void;
with navigate:
this.navCtrl.setDirection('root');
this.router.navigate(['/app/profile']);
with navigateByUrl:
this.navCtrl.setDirection('root');
this.router.navigateByUrl('/app/profile');
or using directive:
<a routerLink="/app/profile" routerDirection="root">Proceed</a>
Upvotes: 3
Reputation: 836
With @angular/router one way to achieve the behavior that you expect is by using replaceUrl and skipLocationChange of the NavigationExtras here on official docs The code would something like this:
this.router.navigate([pageLink], {replaceUrl: true})
But yes, the referred navigateRoot doesnt exist on @angular/router as it was on ionic 3
Upvotes: 25
Reputation: 1553
To make your page set to the root page in Ionic 4 you should use navigateRoot instead of setRoot
this.navCtrl.navigateRoot('/pageName');
Upvotes: 6
Reputation: 1157
Generally speaking, and citing this awesome article on this matter by Josh Morony:
In Ionic 4 with Angular routing, there is no root page to be defined.
Because Ionic 4 relies on Angular's router, the NavController has been changed to reflect this new reality, and for an Angular application there is no such a thing like "root" route. You simply transition between routes and the framework does the rest of the work.
Generally speaking, the methods navigateRoot
, navigateBackward
and navigateForward
are here only to instruct Ionic on how to deal with animations. So you can use navigateRoot
in Ionic 4 to accomplish the same of what you used setRoot
on Ionic 3.
I strongly recommend that you read the aforementioned article, it covers a lot of what you need to know to migrate your routes from version 3 to version 4 of Ionic.
Upvotes: 26