微信小程序 - 页面间传值

马丁路德 等级 381 0 0

小程序页面间传值

大家晚上好,说晚上好是因为是在晚上写的,说这句话是因为这句话开篇不那么突然。那么小程序的页面间传值,在我使用这段时间里,我就非常的主观的把它们分为wx.navigateTo和非wx.navigateTo的,因为wx.navigateTo有一个事件参数event,我从当前页跳转到下一页,如果需要能返回,我都用的wx.navigateTo,那这个event作用嘛就是可以接收,下一页返回回来的参数的。像🦐面这样:

index.js

wx.navigateTo({
  url: url,
  events: {
    // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
    acceptDataFromOpenedPage: (data) => { // 这个方法是随便命名的,没有多少要求,不过被打开的页面emit的时候第一个参数要写这个方法名
      console.log('从隔壁扔来的酸豆角馅儿的包子',data)
    },
  },
  success: function (res) {
    // 通过eventChannel向被打开页面传送数据
    // res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
  }
}) 

gebi.js

// 确认选择
confirm() {
  const eventChannel = this.getOpenerEventChannel()  // 这里应该是微信自带的方法,直接用,妥妥的
  eventChannel.emit('acceptDataFromOpenedPage', data)  // 上一个页面event里接收参数的方法名
  wx.navigateBack()   // 返回上一个页面
} 

这两个操作就完成了类似于vue2.x的父子组件传值,这个emit简直一摸一样。

那怎么向下一个页面传值呢?在不使用store,storage的时候,可以通过Url后面带参的方式还有就是上面wx.navigateTo的success回调。虽然success回调我没有用过,但是看了一下感觉非常像我用webworker的时候向子线程里面传值和子线程向主线程传值时,主线程和子线程对数据的接收方式。说白了我觉得就是'监听'(addeventlistener) (0o-_^o)

这里要提一嘴,URL路径的前面就是pages的前面在跳转的时候带/,就是这样

wx.navigateTo({
  url: '/pages/index/index'
}) 

小程序的URL传值

小程序的URL传值,跟我们普通的路由带参时一样的,都是后面带问号(?)和且符号(&),但是要分为基本类型的数据传值和引用类型的数据传值。普通的就下面这样儿:

wx.navigateTo({
  url: '/pages/index/index?page=/pages/home/home&id=0077FF'
}) 

是的你没有看错,就是可以这么传这么个值'/pages/home/home',别的特殊字符应该是要转一下吧,没试过。

小程序的URL传对象

那传个对象或者数组的话要:

传:先转字符串,在编码。

收:先解码,在转对象。

data = {
    name: '包子',
  type: '牛肉粉丝'
}
wx.navigateTo({
  url: `/pages/index/index?page=/pages/home/home&params=${encodeURIComponent(JSON.stringify(data))}`
}) 
onLoad (options) {
    const {page} = options;
    const params = JSON.parse(decodeURIComponent(options.params))
} 

嗯~就这样传,没得错。

提一嘴store

我这个项目用的mobx,在mobx里面的拿到的数组的数据就变得很奇怪,不明原因解决方法是。mobx里面有toJS()的方法,用一下就好了。

import { toJS } from 'mobx-miniprogram';
let value = toJS(xxxx) 

旋转跳跃

关于跳转,小程序的官网说的很清楚了,我在这里就做个表格吧。

wx.navigateTo 跳转到某页面,可以返回,页面栈最多10层,event内部方法可以获取下一页面返回的数据
wx.navigateBack 返回上一页或者多个页面,getCurrentPages(没用过,都是直接wx.navigateBack()用的)可获取当前页面栈
wx.reLaunch 关闭所有页面,并直接跳转到某一个页面
wx.redirectTo 关闭当前页面,并直接跳转到某一个页面

wx.switchTab. -0-0----> 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面(官网原话)

关于EventChannel,就是上面说的页面间传值,我也就用了emit,剩下的off,on,once这些我没用过,不好讲因为没得场景带入不好理解,我估摸着也许可能猜测哈能做发布订阅模式来写一些东西。

两个表格是不是觉得分的很清,嘿嘿嘿。其实是我markdown的表格没用好,分开感觉居然更合适。

收藏
评论区

相关推荐

喜大普奔,微信终于支持外网打开小程序啦!
前言 千呼万唤始出来,微信小程序终于支持以URL Scheme的形式从外部唤起了。 long long ago 我们只能在微信内的网页中使用微信开发标签小程序跳转按钮
微信小程序支付功能全流程实践
前言 微信小程序为电商类小程序,提供了非常完善、优秀、安全的支付功能。在小程序内可调用微信的API完成支付功能,方便、快捷。小程序开发者在开发小程序时,支付流程是必然要接触到,今天胡哥就小程序支付的全流程为大家一一细说,让小伙伴能快速得掌握小程序支付能力,避免踩坑! 知己知彼,方能百战不殆 小程序支付流程图 小程序支付交互流程图(https:/
微信小程序modal
首先创建一个组件component,组件命名可以为modal modal.wxml的内容为 <view class'modalmask' wx:if'{{show}}' bindtap'clickMask' <view class'modalcontent' <scrollview scrolly class'mainc
微信小程序wxml使用substring
首先创建subutils.wxs文件 var sub function (val, start0, end17) { if (val.length 0 || val undefined) { return } if (val.length end) { return val.substring(start
微信小程序轮播图
实现效果 wxml代码 <view style"height:20rpx;"</view <view class"swiper"
微信小程序苹果机wx.showModal()
最近做项目中,发现使用wx.showModal()苹果机出现取消文字不显示问题,纠正后显示正确 wx.showModal({ title: '提示', content:'登录后体验更多功能' }) wx.showModal({ cancelText: '取消', confi
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题 image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png) 错误代码 var date '20210306 17:00:00' var dateT
微信小程序验证url地址
笔记类 var that this that.optional()是验证是否为空方法 url(value) { return that.optional(value) || /^(?:(?:(?:https?|ftp):)?//)(?:S(?::S)?@)?(?:
微信小程序部分api 会触发 onShow onHide
解决部分api触发小程序 onShow onHide 首先要明白 微信小程序的 onShow() onHide()分为页面级的和应用级的,应用级的就是app.js里面的那几个,页面级的就是pages里的 当使用了下列api时,均会触发页面级和应用级的onShow onHide 1. 点击右上角小圆点关闭小程序。 2. 图片预览:wx.preview
微信小程序 - 路由实践
欢迎来到我博客阅读:1\. 前言在微信小程序由一个 App()实例,和众多Page()组成。而在小程序中所有页面的路由全部由框架进行管理,框架以栈的形式维护了所有页面,然后提供了以下 API 来进行路由之间的跳转:1. wx.navigateTo2. wx.redirectTo3. wx.navigateBack4.
微信小程序 - 引入字体图标
网站图标要想做到清晰无锯齿,使用普通图片或者雪碧图都很难达到这个目的,一般我们都会引入字体图标(svg转font,使用图标像使用字体一样,详见《web页面使用字体图标》,那么如何在微信小程序中使用自定义图标呢?请看详细步骤:1、从上选择喜欢的图标加入购物车,在购物车弹窗中点击“下载代码”后,解压阿里图库 加入购物车购物车 下载代码图标文件内容2.、进入导入第
微信小程序 - 页面间传值
小程序页面间传值大家晚上好,说晚上好是因为是在晚上写的,说这句话是因为这句话开篇不那么突然。那么小程序的页面间传值,在我使用这段时间里,我就非常的主观的把它们分为wx.navigateTo和非wx.navigateTo的,因为wx.navigateTo有一个事件参数event,我从当前页跳转到下一页,如果需要能返回,我都用的wx.naviga
Vue和微信小程序的区别
_写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别。_一、生命周期先贴两张图: vue生命周期 小程序生命周期相比之下,小程序的钩子函数要简单得多。vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩子并不一样。 onLoad
推荐几个微信小程序开发小技巧
前段时间在下开发了个微信小程序,开发过程中总结了一些我觉得对我有用的小技巧,提炼出来,相当于一个总结复盘,也希望可以帮助到大家。如果对大家确实有帮助,别忘了点赞哦 🌟 ~1\. 开发中可能遇到的坑以及 Tips本来想写个小技巧的,结果我总结了一堆坑,没上手之前完全想象不到微信小程序的开发体验是如此之差、如此之烂,从微信
微信小程序体验composition-api(类似vue3)
微信小程序compositionapi用该是什么样子? 使用使用起来应该像是这个样子wxue(options) setup配置应该是包含一个setup选项是一个函数,返回的函数可以this.xxx调用,返回的数据可以this.data.xxx用到,如下import wxue, reactive from 'wxue'wxue( setup(option