WeChat アプレットはページ パラメータの受け渡しをどのように実装しますか?

序文

アプレットが 1 ページを超える場合、ページ パラメータの転送が必要になる場合があります。以下に 4 つのページ メソッドをまとめます。

パス転送

URL の後にパラメータを結合することで、? を使用してパラメータとパスを区切ったり、パラメータのキーとパラメータ値を = で接続したり、異なるパラメータを &; で区切ったりします (「path?key=value&key2=value2」のように)。

ケース: パラメータと A ページ
ジャンプコードを使用して、A ページがB ページにジャンプします

goB(){
    wx.navigateTo({
      url: '/pages/B/index?id=value',
    })
  },

Bページ受信コード

onLoad: function (options) {
	console.log('id', options.id)
}

上記の場合は文字列パラメータですが、多くの場合、次のコードのようにオブジェクトを渡す必要があります。

Page({
  data: {
    userInfo:{
      name:'cym',
      age:16
    }
  },
  goB(){
    wx.navigateTo({
      url: '/pages/B/index?id='+this.data.userInfo,
    })
  },
})

上記と同じ構造を使用した場合、出力結果は次のようになります: [object Object]

このとき、パラメーターを渡すために JSON.stringify(obj) を通じてオブジェクト オブジェクトを JSON 文字列に変換し、受信ページの JSON.parse を通じて解析して使用する必要があります。

ページジャンプコード

 goB(){
    let userStr = JSON.stringify(this.data.userInfo)
    wx.navigateTo({
      url: '/pages/B/index?id='+userStr,
    })
  }

Bページ受信コード

onLoad: function (options) {
    console.log('id', JSON.parse(options.id))
  }

グローバル変数

アプリのグローバル オブジェクトを通じてグローバル変数を保存します。

app.jsコード

App({
 // 存放对象的全局变量
  globalData:{},
})

ページジャンプコード

// 获取App对象
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: {
      name: 'cym',
      age: 16
    }
  },

  goB() {
    app.globalData.userInfo = this.data.userInfo
    wx.navigateTo({
      url: '/pages/B/index',
    })
  },
})

Bページ受信コード

// 获取全局对象
 const app = getApp()
Page({

  onLoad: function (options) {
    console.log(app.globalData.userInfo)
  }
})

App グローバル変数に格納され、複数のページで使用でき、App オブジェクトから直接取得できます。このデータは内部テストに保存され、アプレットが破棄されるたびに失われます。

データキャッシュ

データキャッシュに保存することによって。

ページジャンプコード

 goB() {
    wx.setStorageSync('userInfo', this.data.userInfo)
    wx.navigateTo({
      url: '/pages/B/index',
    })
  }

Bページ受信コード

 onLoad: function (options) {
    let userInfo = wx.getStorageSync('userInfo', this.data.userInfo)
    console.log(userInfo)
  }

データ キャッシュに保存されているため、複数のページで使用でき、getStorageSync を使用して直接取得できます。このデータはデータ キャッシュに保持され、データ キャッシュがクリアされるかアプレットが削除されない限り、常に存在します。

事件通信

イベントコミュニケーションチャネルを通じて。

ページジャンプコード

goB() {
    wx.navigateTo({
      url: '/pages/B/index',
      success:(res)=>{
				// 发送一个事件
				res.eventChannel.emit('toB',{ userInfo: this.data.userInfo })
			}
    })
  }

Bページ受信コード

onLoad: function (options) {
     //	获取所有打开的EventChannel事件
     const eventChannel = this.getOpenerEventChannel();
     // 监听 index页面定义的 toB 事件
     eventChannel.on('toB', (res) => {
       console.log(res.userInfo) 
     })
   }

要約する

特定のビジネス シナリオに応じて、適切なパラメータの受け渡し方法を選択できます。

おすすめ

転載: blog.csdn.net/weixin_64051447/article/details/131965294