アプレットは前のページに戻り、現在のページのパラメータを保持します

1.需要

AページとBページの2つがあります。要件は、ページAがページBのデータを必要とすることです(同様のシナリオは、民族などに応じてフィルタリングする必要があるリストであり、民族リストは1つのページに配置されます) 、リストページをジャンプする必要があります。民族グループに移動し、所属する民族グループのid属性を指定します)。それを解決する3つの方法があります:

2.解決策

  1. ページBで選択したIDをローカルに保存し、ページAがオンロード時にローカルデータをクエリし、ページAがオンアンロード時にローカルデータをクリアして、他のページがページAに入るときの判断の誤りを防ぎ、
    このように感じる非常に面倒で面倒判断するとき
//B页面
binddetail(e) {
    
    
    wx.setStorageSync(
      'nationInfo',e.detail,
    )
    wx.navigateBack({
    
    
      delta: 1
    })
  },
//A页面
 onShow:function(){
    
    
    //判断本地数据
    var nation = {
    
    }
    nation = wx.getStorageSync('nationInfo')
    console.log(nation, 'sync')
    if (nation.id == '') {
    
    
      x
      x
      x
      x
      x
    }else{
    
    
	    x
	    x
	    x
	    x
    }
  },
  //清掉本地数据
  onUnload: function () {
    
    
    wx.removeStorageSync('nationInfo')
  },
  1. Bページの前のページのルートを判断し、選択後のパラメータで前のページに戻ります。
    この方法は実際には非常に便利だと思いますが、Aページがタブページの場合、リダイレクトは実行されません。
 onShow(){
    
    
    let pages = getCurrentPages()
    let currPage = null
    if(pages.length){
    
    
      currPage = pages[pages.length - 2]
    }
    let route = currPage.route
    this.setData({
    
    
      lastPage:route.slice(5)
    })
    console.log(this.data.lastPage)//得到上一页的路由
  },
//带参数返回上一页
returnBack(e){
    
    
    console.log(e)
    var id = e.currentTarget.dataset.id
    var eng = e.currentTarget.dataset.eng
    var name = e.currentTarget.dataset.name
    var img = e.currentTarget.dataset.img
    wx.redirectTo({
    
    //不想有历史记录就用redirected
      url: `${
      
      this.data.lastPage}?id=${
      
      id}`,
    })
}
  1. 3番目の方法はBaiduによって取得されます。これは、はるかに簡単な方法です。前ページに戻る方法で前ページのルートを判断し、前ページのデータ値を直接変更します
returnBack(e){
    
    
    console.log(e)
    var id = e.currentTarget.dataset.id
    var eng = e.currentTarget.dataset.eng
    var name = e.currentTarget.dataset.name
    var img = e.currentTarget.dataset.img
    let pages = getCurrentPages(); //获取当前页面pages里的所有信息。
    let prevPage = pages[pages.length - 2]; //prevPage 是获取上一个页面的js里面的pages的所有信息。-2 是上一个页面,-3是上上个页面以此类推。                                                           
    prevPage.setData({
    
      // 将我们想要传递的参数在这里直接setData。上个页面就会执行这里的操作。
      nationId: e.currentTarget.dataset.id,
      nationImg: e.currentTarget.dataset.img,
      nationSubName: e.currentTarget.dataset.eng,
      nationName: e.currentTarget.dataset.name
    })
    wx.navigateBack({
    
    //直接back就好了,也不会计入历史记录
      delta:1
    })
  },

この方法の欠点は、前のページに戻った後、onShowのみが実行され、onloadが実行されないことです。ページBのデータに従ってページAのリストを変更する必要がある場合、リストは次のようになります。ページAのonShowでクリアされ、ページは0に戻ります。後でリストを再度要求してください。こちらです。問題ないと言っても過言ではありませんが、Aページに参​​加しているリストページが詳細ページにジャンプして詳細ページに戻るので、onShowで再度リストをリクエストするのは良くないと個人的に感じています。リストページ、次にAページもデータを再度要求します。ページの位置は詳細ページに移動する前の位置ではなく、通常、データを再度要求する必要はありません。ですから、よく考えてみても、2番目の方法は信頼できると思います。結局のところ、詳細ページがAページに戻ると、パラメーターは含まれず、onloadのメソッドは実行されないため、リストページの位置は前の位置のままです。
上記は私自身の意見です。誰もが批判して訂正することを歓迎します!

おすすめ

転載: blog.csdn.net/weixin_44994372/article/details/102640295