webentwicklung-frage-antwort-db.com.de

Wie übergeben Sie Parameter in der Pop-Methode von ionic2

Ich habe versucht, Parameter in der Push-Methode von ionic2 zu übergeben. so was

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

aber gibt es eine Möglichkeit, Parameter in pop () zu übergeben.

14
Akash Rao

Ich schlage vor, Sie verwenden Events . Alles, was Sie tun müssen, ist, ein Ereignis auf der übergeordneten Seite zu abonnieren und das Ereignis dann auf dem untergeordneten Element zu veröffentlichen, wobei die gewünschten Daten übergeben werden:

// 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

So habe ich es in ionic-3 erreicht und finde es einfacher.

Seite, von der aus wir knacken ()

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

Seite nach Pop ():

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

Derzeit glaube ich, dass dies nicht möglich ist. 

Es gibt eine Github-Ausgabe , für die das Ionic-Kernteam jedoch eine großartige Diskussion hat. Es klingt, als hätten sie es auch in die Ionic 2-Roadmap aufgenommen! In der Github-Ausgabe wurden auch einige Problemumgehungen vorgeschlagen, z. B. das Hinzufügen der ParentPage zu den NavParams, die auf der ChildPage angezeigt werden, aber es ist alles ziemlich hackig.

2
TheBrockEllis

Verwenden Sie popTo() anstelle von pop()

popTo() hat einen params?-Parameter, an den Sie Ihre Parameter wie folgt übergeben können:

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

AKTUALISIERUNG: ES WAR UNTERSTÜTZT, ZU ARBEITEN, ABER ES TUN NICHT


Anscheinend gibt es | Siehe Doc Reference |

pop(opts) nimmt einen Parameter vom Typ object

so

einen Schritt zurückgehen

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

und um zu einer bestimmten Ansicht im Protokollstapel zu gelangen

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

und zum Stamm des Stapels gehen

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

Zum Abrufen der Parameter _ ​​(Ich denke, das sollte funktionieren. Ungeprüft!)

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

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

Für gesendete Daten mit Pop können Sie die getPrevious () -Methode verwenden.

Beim Verlassen der aktuellen Seite die vorherige Seite aufrufen und Daten senden

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

Auf der nächsten Seite erhalten Sie Daten von navParams

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

einen Rückruf übergeben, wenn in diesem Forum von aaronksaunders umgestellt wird

https://forum.ionicframework.com/t/solved-ionic2-navcontroller-opopwithwithparams/58104/4

Ich werde es ausprobieren.

Wenn Sie eine Ionenwinkelanwendung verwenden, können Sie ionic-angularEreignisse

page1.ts

import { Events,NavController } from 'ionic-angular';

export class page1 {

    constructor(private events: Events,
                private nvCtrl: NavController
               ) {}

     goToPage2() {
         this.navCtrl.pop();
         this.event.publish('your-event');
 }

}

page2.ts

import { Events} from 'ionic-angular';

export class page1 {

    constructor(private events: Events,
                private nvCtrl: NavController
               ) {}

     ionViewDidLoad() {
        this.events.subscribe('your-event');
  }

}

0
Aditya