Ionic2のPushメソッドでパラメーターを渡してみました。このような
this.nav.Push(SecondPage, {
thing1: data1,
thing2: data2
});
しかし、pop()でパラメーターを渡す方法はありますか。
Events を使用することをお勧めします。必要なのは、親ページでイベントをサブスクライブし、必要なデータを渡す子でイベントを公開することです。
// 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]);
});
これが私がionic-3でそれを達成した方法であり、簡単に見つけられます。
Pop()したページ
this.navCtrl.getPrevious().data.thing1 =data1;
this.navCtrl.getPrevious().data.thing2 =data2;
this.navCtrl.pop();
Pop()の後のページ:
public ionViewWillEnter() {
this.thing1 = this.navParams.get('thing1')|| null;
this.thing2 = this.navParams.get('thing2')|| null;
}
現在、これを達成する方法はないと考えています。
Githubの問題 がありますが、Ionicコアチームによる素晴らしい議論があります。 Ionic 2ロードマップにも追加したようです。 Githubの問題には、ChildPageに行くNavParamsにParentPageを追加するなど、いくつかの回避策が提案されていますが、それはすべてかなりハックです。
popTo()
の代わりにpop()
を使用します
popTo()
にはparams?
パラメータを次のように渡すことができます。
this.nav.popTo(SecondPage, {
thing1: data1,
thing2: data2
});
あるようです| ドキュメントリファレンスを参照 |
pop(opts)
は、object
型のパラメーターを1つ取ります
そう
一歩戻る
this.nav.pop({
thing1: data1,
thing2: data2
});
履歴スタックの特定のビューに移動する
this.nav.popTo(SecondPage, {
thing1: data1,
thing2: data2
});
スタックのルートに移動します
this.nav.popToRoot({
thing1: data1,
thing2: data2
});
paramsを取得するには(これは動作するはずです。未テスト!)
export class SecondPage{
constructor(params: NavParams){
this.params = params;
console.log(this.params.get('thing1'));
}
}
ポップ付きの送信データには、getPrevious()メソッドを使用できます。
現在のページから離れるとき、前のページを取得してデータを送信する
ionViewWillLeave() {
this.navCtrl.getPrevious().data.formData = {credentials: {...}};
}
次のページでnavParamsからデータを取得します
ionViewWillEnter() {
if (this.navParams.get('formData')) {
// do something
}
}
このフォーラムでaaronksaundersに移行するときにコールバックを渡す
https://forum.ionicframework.com/t/solved-ionic2-navcontroller-pop-with-params/58104/4
試してみます。
イオン角型アプリケーションを使用している場合は、ionic-angular
イベント
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');
}
}