web-dev-qa-db-fra.com

Comment passer des paramètres dans la méthode pop de ionic2

J'ai essayé de passer des paramètres dans la méthode Push de ionic2. comme ça

this.nav.Push(SecondPage, {
    thing1: data1,
    thing2: data2
});

mais est-il possible de passer un paramètre dans pop ().

14
Akash Rao

Je vous suggère d'utiliser Events . Tout ce que vous avez à faire est de vous abonner à un événement de la page parent, puis de le publier sur l'enfant transmettant les données souhaitées:

// taken from the docs
import { Events } from 'ionic-angular';

constructor(public events: Events) {}

// first page (publish an event when a user is created)
function createUser(user) {
  console.log('User created!')
  events.publish('user:created', user);
}

// second page (listen for the user created event)
events.subscribe('user:created', (userEventData) => {
  // userEventData is an array of parameters, so grab our first and only arg
  console.log('Welcome', userEventData[0]);
});
13
akz92

Voici comment je l'ai réalisé dans ionic-3 et le trouve plus facile.

Page d'où nous pop ()

 this.navCtrl.getPrevious().data.thing1 =data1;
 this.navCtrl.getPrevious().data.thing2 =data2;
 this.navCtrl.pop();

Page après pop ():

public ionViewWillEnter() {
     this.thing1 = this.navParams.get('thing1')|| null;
     this.thing2 = this.navParams.get('thing2')|| null;
} 
12
Prashant

Actuellement, je pense qu’il n’ya aucun moyen de le faire. 

Il y a un problème de Github pour cela cependant, il y a eu de bonnes discussions à ce sujet par l'équipe centrale ionique. On dirait qu'ils l'ont aussi ajouté à la feuille de route Ionic 2! La question de Github a également quelques solutions de contournement proposées, telles que l’ajout de la page de garde à la page de garde de NavParams allant à la page de garde, mais c’est un peu hacky.

2
TheBrockEllis

Utilisez popTo() au lieu de pop()

popTo() a le paramètre params? où vous pouvez transmettre vos paramètres comme ceci:

    this.nav.popTo(SecondPage, {
    thing1: data1,
    thing2: data2
});
1
deanwilliammills

MISE À JOUR: CELA était censé fonctionner, MAIS NE FAIT PAS


On dirait qu'il y a | Voir la référence du doc ​​ |

pop(opts) prend un paramètre de type object

alors

faire un pas en arrière

this.nav.pop({
    thing1: data1,
    thing2: data2
});

et d'aller à une vue spécifique dans la pile d'historique

this.nav.popTo(SecondPage, {
    thing1: data1,
    thing2: data2
});

et aller à la racine de la pile

this.nav.popToRoot({
    thing1: data1,
    thing2: data2
});

Pour récupérer les paramètres _ ​​(je suppose que cela devrait fonctionner. Pas testé!)}

export class SecondPage{
 constructor(params: NavParams){
   this.params = params;

   console.log(this.params.get('thing1'));
 }
}
1
Ankit Singh

Pour les données envoyées avec pop, vous pouvez utiliser la méthode getPrevious ().

En quittant la page actuelle, obtenir la page précédente et envoyer des données

ionViewWillLeave() {
    this.navCtrl.getPrevious().data.formData = {credentials: {...}};
}

Dans la page suivante, obtenez les données de navParams

ionViewWillEnter() {
    if (this.navParams.get('formData')) {
      // do something
    }
  }
0
rhanesoghlyan

passer un rappel lors de la transition par aaronksaunders dans ce forum

https://forum.ionicframework.com/t/solved-ionic2-navcontroller-pop-with-params/58104/4

Va l'essayer.

0