微信小程序返回上级页面传参的几种方法

这篇具有很好参考价值的文章主要介绍了微信小程序返回上级页面传参的几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在做微信小程序跳转页面,经常会遇到二级页面要返回上级页面,并且需要携带参数,wx.navigateTo()跳转大家都知道直接在url上面拼接参数,之后再二级页面onLoad(options)里获取,但是返回页面wx.navigateBack()不可以那样做,所以就可以用以下几种方式来做,具体看个人业务适合用哪种吧,没有固定的。

1、使⽤本地缓存Storage实现

setStorage存储

将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。

	// 异步存储
	wx.setStorage({
	  key:"key",
	  data:"value"
	})

	// 开启加密存储
	wx.setStorage({
	  key: "key",
	  data: "value",
	  encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true
	  success() {
	    wx.getStorage({
	      key: "key",
	      encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true
	      success(res) {
	        console.log(res.data)
	      }
	    })
	  }
	})

	// 同步存储
	try {
	  wx.setStorageSync('key', 'value')
	} catch (e) { }

getStorage获取

从本地缓存中异步获取指定 key 的内容。

	// 异步获取
	wx.getStorage({
	  key: 'key',
	  success (res) {
	    console.log(res.data)
	  }
	})

	// 开启加密存储
	wx.setStorage({
	  key: "key",
	  data: "value",
	  encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true
	  success() {
	    wx.getStorage({
	      key: "key",
	      encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true
	      success(res) {
	        console.log(res.data)
	      }
	    })
	  }
	})

	// 同步获取
	try {
	  var value = wx.getStorageSync('key')
	  if (value) {
	    // Do something with return value
	  }
	} catch (e) {
	  // Do something when catch error
	}

removeStorage、clearStorage清除缓存

清理本地数据缓存。

	// 从本地缓存中移除指定 key。
	wx.removeStorage({
	  key: 'key',
	  success (res) {
	    console.log(res)
	  }
	})
	
	try {
	  wx.removeStorageSync('key')
	} catch (e) {
	  // Do something when catch error
	}
	
	// 清理本地数据缓存。
	wx.clearStorage()
	
	try {
	  wx.clearStorageSync()
	} catch(e) {
	  // Do something when catch error
	}

2、使⽤⼩程序的Page页⾯栈getCurrentPages实现

在当前页设置上一页的data

	var pages = getCurrentPages(); // 获取页面栈
	var currPage = pages[pages.length - 1]; // 当前页面
	var prevPage = pages[pages.length - 2]; // 上一个页面
	prevPage.setData({
		// 要设置的值
		mydatas: {
			a:1,
			b:2
		} 
	})
	wx.navigateBack({ delta: 1})

直接调用方法名来更新数据

【页面A使用wx.navigateTo跳转到页面B】

	// 页面A
	Page({ 
		data: { name: '' }, 
		//更新name 
		changeData: function(name){ 
			this.setData({ name: name }) 
		}
	})
	// 页面B
	Page({ 
		// 此方法用于文本框输入回调 
		onInputback : function (e) { 
			//获取页面栈 
			var pages = getCurrentPages(); 
			if(pages.length > 1){ 
				//上一个页面实例对象 
				var prePage = pages[pages.length - 2]; 
				// 调用上个页面的方法 
				prePage.changeData(e.detail.value) 
			} 
		}
	})

3、使⽤globalData实现

使用全局存储保存值,在需要的地方使用或修改

	var app = getApp();
	Page({
	  onLoad: function() {
	  	// 获取globalData里的值
	    console.log(app.globalData.xxx);
	    
		// 设置globalData里的值
		getApp().globalData.xxx = 'abc'
	  }
	})

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

wx.navigateTo的events的实现原理是利⽤设计模式的发布订阅模式实现的

	wx.navigateTo({
	  url: 'test?id=1',
	  events: {
	    // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
	    acceptDataFromOpenedPage: function(data) {
	      console.log(data)
	    },
	    someEvent: function(data) {
	      console.log(data)
	    }
	    ...
	  },
	  success: function(res) {
	    // 通过 eventChannel 向被打开页面传送数据
	    res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
	  }
	})
	//test.js
	Page({
	  onLoad: function(option){
	    console.log(option.query)
	    const eventChannel = this.getOpenerEventChannel()
	    eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});
	    eventChannel.emit('someEvent', {data: 'test'});
	    // 监听 acceptDataFromOpenerPage 事件,获取上一页面通过 eventChannel 传送到当前页面的数据
	    eventChannel.on('acceptDataFromOpenerPage', function(data) {
	      console.log(data)
	    })
	  }
	})

比较:文章来源地址https://www.toymoban.com/news/detail-483008.html

  • globalDataStorage两种⽅法在页⾯渲染效果上⽐其他两种稍微慢⼀点
  • getCurrentPagesevents两种⽅法在B页⾯回退到A页⾯之前已经触发了更新,
    globalDataStorage两种⽅法是等返回到A页⾯之后,在A页⾯才触发更新。
    并且globalDataStorage两种⽅式,
    要考虑到A页⾯更新完以后要删除globalDataStorage的数据,
    避免onShow⽅法⾥⾯重复触发setData更新页⾯。
  • 所以个⼈更推荐⼤家使⽤getCurrentPagesevents两种⽅式。**

到了这里,关于微信小程序返回上级页面传参的几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 method传参 和 页面传参

    image src=\\\"/img/b1.jpg\\\" class=\\\'bannerImg\\\' mode=\\\"widthFix\\\" bindtap=\\\"gotoMessage\\\" data-flag=\\\"msg\\\"/image 使用data-参数Key = \\\'指定参数值\\\' gotoMessage(e){     let flagName =  e.target.dataset.flag     if(flagName === \\\'msg\\\'){       wx.switchTab({         url: \\\'/pages/message/message\\\',       })     }else if(fla

    2024年02月09日
    浏览(40)
  • 微信小程序如何实现页面传参?

    只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递,下面我总结了 4 种页面方法。 通过在url后面拼接参数,参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 分隔;如 ‘path?key=valuekey2=value2’。 案例:A页面带参数跳转到B页面 A页面跳转代

    2024年02月15日
    浏览(32)
  • 微信小程序如何实现页面传参和页面传递多个参数

    只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递,下面我总结了 4 种页面方法。 下面时多个参数页面传参的方式   通过在url后面拼接参数,参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 分隔;如 ‘path?key=valuekey2=value2’。 案例:

    2024年02月11日
    浏览(56)
  • vue中组件传参的几种方法

    Props:通过在父组件中定义props属性,将数据传递给子组件。子组件通过props属性接收数据。例如: $emit:通过在子组件中触发事件,将数据传递给父组件。父组件通过在子组件上监听事件,接收数据。例如: Provide/Inject:通过在父组件中提供数据,让子孙组件可以注入数据。

    2024年02月12日
    浏览(33)
  • JS中跳转传参的几种方法

    在JavaScript中,页面跳转并传递参数主要有以下几种方法: 1. 使用URL的查询字符串 这是最常见的方法,你可以在URL后面添加查询字符串来传递参数。查询字符串以 ? 开始,参数之间用 分隔。 例如: 在接收页面,你可以使用 window.location.search 来获取查询字符串,然后解析它来

    2024年04月26日
    浏览(29)
  • 微信小程序页面返回操作拦截

    返回操作包括三种情形,右滑手势、安卓物理返回键和调用 navigateBack 接口 微信小程序没有提供类似 onBackPress 监听页面返回的api,在某些特定场景下,业务收到了限制 为了解决这一限制,本文提供了两种较为常用的解决方案 方案一 重写navigationBar 目的是重写左上角返回按钮

    2024年02月08日
    浏览(41)
  • 【Vue3】路由传参的几种方式

    路由导航有两种方式,分别是:声明式导航 和 编程式导航 参数分为query参数和params参数两种 1.传参 在路由路径后直接拼接 ?参数名:参数值 ,多组参数间使用 分隔。 如果参数值为变量,需要使用模版字符串。 2.接收与使用 1.传参 to不再传递字符,而是传一个对象,由于参数

    2024年02月21日
    浏览(39)
  • uniapp微信小程序 页面跳转传参(uni.switchTab传参无法获取,uni.reLaunch传参可以获取)

      因为是tab页面,我首先想到的就是通过:uni.switchTab进行页面跳转。 代码如下: 然后在首页的onShow生命周期函数中进行监听路由参数。 代码如下: 结果uni.switchTab跳转的页面是不能够将路由参数传递到页面中的。  这样就可以拿到路由中的参数了。  这样问题就解决了。

    2024年02月10日
    浏览(38)
  • 微信小程序的跨页面传参以及data-方法的相关细节

    🙂博主:小猫娃来啦 🙂文章核心: 微信小程序的跨页面传参以及data-方法的相关细节 其实在学习新东西的过程中,最快速的方式就是多看官方文档。 很多技术层面的东西,官方文档其实讲的很清楚了。 vue这个渐进式框架在很久以前,是没有多少官方文档供人学习的,但现

    2024年02月11日
    浏览(42)
  • 子组件向父组件传参的几种方法

    在用vue框架写项目的时候,多多少少会遇到子组件向父组件传参的方法。作为一个新手,确实让人头疼,于是便有了这篇小白写的总结,话不多说,开始! 以下方法全部基于这两个父子组件结构实现: 父组件 子组件 思路:在父组件中定义一个函数,通过props传递给子组件,

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包