小程序跳转返回页面参数修改


前言

小程序从A页面跳转到B页面,在B页面选择一个值后返回到A页面,在A页面使用在B页面选中的值。例如:在购买订单页面跳转到地址列表,选择完地址以后回退到订单页面,订单页面的配送地址需要同步更新。


解决方法

常见的比容要容易解决的方案是使用小程序的全局存储globalData、本地缓存storage、获取小程序的页面栈,调用上一个Page的setData方法、以及利用wx.navigateTo的events属性监听被打开页面发送到当前页面的数据。下面给大家简单对比下四种方法的优缺点:


1、使用globalData实现

//page A
const app = getApp() //获取App.js实例
onShow() {//生命周期函数--监听页面显示
  if (app.globalData.backData) {
    this.setData({ //将B页面更新完的值渲染到页面上
      backData: app.globalData.backData
    },()=>{
        delete app.globalData.backData //删除数据 避免onShow重复渲染
    })
  }
}
//page B
const app = getApp() //获取App.js实例
changeBackData(){
   app.globalData.backData = '我被修改了'
   wx.navigateBack()
}

2、使用本地缓存Storage实现

//page A
  onShow: function () {
    let backData = wx.getStorageSync('backData')
    if(backData){
       this.setData({
             backData
        },()=>{
             wx.removeStorageSync('backData')
        })
    }
  },
 //page B
 changeBackData(){
    wx.setStorageSync('backData', '我被修改了')
    wx.navigateBack()
 },

3、使用小程序的Page页面栈实现

使小程序的页面栈,比其他两种方式会更方便一点而且渲染的会更快一些,不需要等回退到A页面上再把数据渲染出来,在B页面上的直接就会更新A页面上的值,回退到A页面的时候,值已经被更新了。globalData和Storage实现的原理都是在B页面上修改完值以后,回退到A页面,触发onShow生命周期函数,来更新页面渲染。

//page B
changeBackData(){
    const pages = getCurrentPages();
    const beforePage = pages[pages.length - 2]
    beforePage.setData({  //会直接更新A页面的数据,A页面不需要其他操作
      backData: "我被修改了"
    })
}

4、使用wx.navigateTo API的events实现

wx.navigateTo的events的实现原理是利用设计模式的发布订阅模式实现的,有兴趣的同学可以自己动手实现一个简单的,也可以实现相同的效果。

//page A
 goPageB() {
    wx.navigateTo({
      url: 'B',
      events: {
        getBackData: res => { //在events里面添加监听事件
          this.setData({
            backData: res.backData
          })
        },
      },
    })
  },
//page B    
changeBackData(){
    const eventChannel = this.getOpenerEventChannel()
       eventChannel.emit('getBackData', {  
         backData: '我被修改了'
    });
     wx.navigateBack()
 }

总结

1和2两种方法在页面渲染效果上比后面两种稍微慢一点,3和4两种方法在B页面回退到A页面之前已经触发了更新,而1和2两种方法是等返回到A页面之后,在A页面才触发更新。并且1和2两种方式,要考虑到A页面更新完以后要删除globalData和Storage的数据,避免onShow方法里面重复触发setData更新页面,所以个人更推荐大家使用后面的3和4两种方式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: H5跳转微信小程序是一种通过在H5页面中添加跳转链接实现从H5页面跳转微信小程序的功能。下面是一个H5跳转微信小程序的demo: 1. 首先,在H5页面中添加一个跳转微信小程序的按钮或链接。可以使用HTML的<a>标签和href属性来实现。例如: ```html <a href="weixin://dl/business/?appid=wxappid">点击跳转微信小程序</a> ``` 在上面的代码中,weixin://dl/business/ 是微信用于跳转小程序的协议。 2. 将wxappid替换为你要跳转微信小程序的AppID。可以在微信公众平台上的小程序管理后台找到小程序的AppID。 3. 当用户点击该按钮或链接时,系统会自动检测用户的设备是否安装了微信小程序。如果安装了,会自动打开小程序;如果未安装,会跳转到微信的下载页面。 需要注意的是,以上方法只适用于在微信内部打开的H5页面。在其他浏览器或App中打开的H5页面无法使用该方法跳转微信小程序。 另外,如果你是小程序开发者,还可以使用微信小程序提供的API实现跳转到其他小程序的功能。具体的实现方法可以参考微信小程序的开发文档。 ### 回答2: 在实现H5跳转微信小程序的demo中,我们可以通过以下步骤来完成: 1. 首先,我们需要在H5页面中引入微信提供的JS-SDK库文件,可以通过以下代码实现: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 2. 然后,我们需要在微信开放平台上注册并获取微信小程序的AppID。将获取到的AppID填写在H5页面的`wx.config`配置中,具体代码如下: ```javascript wx.config({ appId: 'YourAppID', timestamp: '', nonceStr: '', signature: '', jsApiList: [] }); ``` 在`jsApiList`中填写小程序提供的JS接口,比如跳转小程序的`launchMiniProgram`接口。 3. 接下来,我们需要在H5页面中添加一个跳转按钮,并绑定点击事件。在点击事件中调用`wx.miniProgram`的`navigateBack`方法来实现跳转小程序,具体代码如下: ```javascript document.getElementById('jumpBtn').addEventListener('click', function() { wx.miniProgram.navigateTo({ url: '/pages/index/index' }); }); ``` 其中,`url`参数填写要跳转到的小程序页面路径。 4. 最后,在微信小程序的对应页面中添加一个返回按钮,点击事件中调用`wx.miniProgram`的`navigateBack`方法来返回到H5页面,具体代码如下: ```javascript wx.miniProgram.navigateBack(); ``` 通过以上步骤,我们就可以实现H5页面跳转微信小程序的demo了。当用户点击H5页面中的跳转按钮时,就会跳转到指定的小程序页面;而在小程序页面中点击返回按钮,则会返回到H5页面。 ### 回答3: H5跳转微信小程序的实现方式有多种。以下是一种具体的实现示例: 首先,在H5页面中,可以通过添加一个按钮或链接来实现跳转微信小程序的功能。例如,在HTML代码中添加一个按钮元素,然后使用JavaScript代码来监听按钮的点击事件。 HTML代码示例: ```html <button id="jumpButton">跳转小程序</button> ``` 接着,在JavaScript代码中,通过调用微信小程序接口`wx.miniProgram.navigateTo`来实现跳转到指定的小程序页面。需要在button的点击事件处理函数中编写相关代码。 JavaScript代码示例: ```javascript document.getElementById('jumpButton').addEventListener('click', function() { // 跳转小程序页面路径,在小程序开发工具中可以找到 var path = '/pages/index/index'; // 跳转时携参数,在小程序中可以通过options参数获取 var params = { id: 123 }; // 调用微信小程序接口跳转到指定页面 wx.miniProgram.navigateTo({ url: path + '?id=' + params.id }); }); ``` 在以上示例中,点击按钮后,会调用`wx.miniProgram.navigateTo`接口,携指定的页面路径和参数跳转小程序页面。可以根据实际需求修改`path`和`params`变量的值来实现跳转到不同的小程序页面和传递不同的参数。 需要注意的是,以上示例中的代码是基于微信小程序的开发接口实现的,所以要确保在微信浏览器中打开H5页面才能正常跳转微信小程序。此外,需要提前在微信小程序的配置文件中进行相应的设置,以确保能正确跳转到指定小程序页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值