Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

angular - Ionic 4 - how to pass data between pages using navCtrl or Router service

In Ionic 3 you could use the second argument of the navController to pass data to the next page and retrieve it with the navParams service.

This was a really convenient feature. Is there an equivalent api for routing in Ionic 4?

You can always JSON.stringify the object/array to the routerParams, which in my opinion is less convenient.

In Ionic 4 you can pass data with the modalController using ComponentProps and @Input() making it more suitable of a quick push/pop implementation.

EDIT

My intention with this question is to find out if there are any native APIs from Angular 6+ or Ionic 4+. I am well aware of ways to implement a custom service or resolver to accomplish this.

The goal is to use ionic's and angular's api to its fullest, since in larger projects each custom code requires documentation and increases complexity.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

There is multiple ways to pass a parameters from a page to another in Ionic v4 / Angular 7.2+:

1. Using Extras State (new since Angular 7.2) - Recommanded

Simple and clean

// original page
let navigationExtras: NavigationExtras = { state: { foo: this.foo } };
this.router.navigate(['destination-path'], navigationExtras);
// destination page
constructor(private route: ActivatedRoute, private router: Router) {
    this.route.queryParams.subscribe(params => {
      if (this.router.getCurrentNavigation().extras.state) {
        this.foo= this.router.getCurrentNavigation().extras.state.foo;
      }
    });
  }

2. Use a service and a resolver

Does not fecth the data but a bit heavy.

Store the data into a service and pass a resolver using the router

3. Using object's id (not recommanded)

If your object is stored, you can pass the id in the url and fetch it again.

It will slows the application, implies that the object is stored somewhere and may increase networks issues (if not stored localy)

4. Using query params (not recommanded)

By stringyfing your object: See @Tahseen Quraishi's answer

Only few informations can be passed and the URL is hideous

Some examples here


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...