问题
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?
回答1:
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.
回答2:
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
回答3:
To make your page set to the root page in Ionic 4 you should use navigateRoot instead of setRoot
this.navCtrl.navigateRoot('/pageName');
回答4:
You can setRoot without using angular's router. This code works in Ionic 4
import { NavController } from '@ionic/angular';
constructor(private navCtrl: NavController) {
}
navigateRoot()
navigateRoot(url: string | UrlTree | any[], options?: NavigationOptions): Promise;
this.navCtrl.navigateRoot('/app/profile');
setDirection() with angular's router
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>
来源:https://stackoverflow.com/questions/51684430/ionic-4-setroot-with-angular-router