官方实例:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Object-object

官方实例代码如下:

Page({
onShareAppMessage() {
const promise = new Promise(resolve => {
setTimeout(() => {
resolve({
title: '自定义转发标题'
})
}, 2000)
})
return {
title: '自定义转发标题',
path: '/page/user?id=123',
promise
}
}
})

直接把该段代码复制到你的项目测试,可以打开分享的转发。

但是大家现实中实际的需求肯定是想获取后缀的参数值,官方说在页面onload中可以获取到,但是如果我们在以上页面代码的基础上添加onload后通过转发的卡片打卡小程序发现根本获取不到参数值。

在官方实例代码基础上添加onload:

  onLoad(query) {
console.log("链接参数", query);
wx.showToast({
title: JSON.stringify(query)
});
}

官方说如果自定义promise,则分享信息以promise结果为准。

通过修改实例中的title值测试发现分享后title确实变化了。

Page({
onShareAppMessage() {
const promise = new Promise(resolve => {
setTimeout(() => {
resolve({
title: '自定义转发标题promise'
})
}, 500)
})
return {
title: '自定义转发标题',
path: '/page/user?id=123',
promise
}
}
})

然而我们并没有拿到path的参数值,问题出在哪里呢?

当我把promise删掉了,发现可以通过打开分享出去的卡片拿到参数了,所以问题出在这个promise上。

由此推断:promise覆盖了默认定义的return的值,当promise里没有设定某个值的时候,会使用系统默认的值而不会使用自定义的值。比如上面我们在promise中定义了title值,但是没有定义path值,此时即使return中定义了path,但promise中的path=null会覆盖掉return中的path,所以启用了微信小程序默认的path=当前页面。

这就可以解释为什么有的提问说明明自己定义了path值等于某个页面,但通过卡片打开的依然是当前页面,应该是设置了promise而里面没有path路径。

所以如果要通过接口获取后端的参数,那么应该给promise配置完整的path参数,如果需要动态的背景图那也要在promise中设置imageUrl。

Page({
onShareAppMessage() {
const promise = new Promise(resolve => {
setTimeout(() => {
resolve({
title: '自定义转发标题promise',
path: '/pages/test/test?id=1111&uname=test001'
})
}, 500)
})
return {
title: '自定义转发标题',
path: '/pages/test2/test2?id=123',
imageUrl: '/imgs/tx.png', // 此处不会生效,会使用当前页的截图
promise
}
}
})

需要注意:官方文档里提到了,假如promise超过3秒没有返回结果,那么就会使用自定义的return值,可以通过设置setTime=3500来测试。

Page({
onShareAppMessage() {
const promise = new Promise(resolve => {
setTimeout(() => {
resolve({
title: '自定义转发标题promise',
path: '/pages/test/test?id=1111&uname=test001'
})
}, 3500)
})
return {
title: '自定义转发标题',
path: '/pages/test2/test2?id=123',
imageUrl: '/imgs/tx.png',
promise
}
}
})

上面即使设置了promise,但因为返回时长为3.5秒,所以不生效,会跳转到自定义的test2页面,背景图为自定义的tx.png。

以上两种都可以通过path传递参数了。

ps:官方实例代码里配置的path路径是page/user,该方式已经过时,现在的配置方式是/pages/user/user。

微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法的更多相关文章

  1. 微信小程序转发微信小程序转发

    微信小程序转发涉及以下4个方法: 1.Page.onShareAppMessage({}) 设置右上角“转发”配置,及转发后回调函数返回 shareTicket 票据 2.wx.showSahreMe ...

  2. 微信小程序转发功能

    微信小程序转发涉及以下4个方法: 1.Page.onShareAppMessage({}) 设置右上角“转发”配置,及转发后回调函数返回 shareTicket 票据 2.wx.showSahreMe ...

  3. 微信小程序转发商品的详情页 + 转发功能(传参)

    1.微信小程序转发传参,利用的还是onShareAppMessageapi 2.利用的还有json转换 JSON 是用于存储和传输数据的格式. JSON 通常用于服务端向网页传递数据 函数 描述JSO ...

  4. 微信小程序通过background-image设置背景图片

    微信小程序通过background-image设置背景:只支持线上图片和base64图片,不支持本地图片:base64图片设置步骤如下:1.在网站http://imgbase64.duoshitong ...

  5. 微信小程序-实现分享(带参数)

    微信小程序分享功能的实现方法有两种: 第一种 在page.js中实现onShareAppMessage,便可在小程序右上角选择分享该页面 onShareAppMessage: function () ...

  6. 微信小程序分享功能的path路径

    表示被微信小程序坑惨了 糟心的开始写,老板说先不上太复杂,就先显示了两个页面,然后开开心心的发布,测试了几遍,没啥问题呀.结果,一上上去,就被老板批了! 啥呀! 这分享怎么这个鬼样子!明明我看文档都是 ...

  7. 微信小程序的网络设置,及网络请求:wx.request(OBJECT)

    Md2All 一个Markdown在线转换工具 网址:http://md.aclickall.com 微信公众号:颜家大少本文所用排版工具:http://md.aclickall.com 支持通用的M ...

  8. 微信小程序 text属性设置 WXSS样式

    >微信小程序的布局css样式 参考自  珺L 文字 width: fit-content;font-size:20px;      /*设置文字字号*/color:red;           ...

  9. 微信小程序四(设置底部导航)

    好了 小程序的头部标题 设置好了,我们来说说底部导航栏是如何实现的. 我们先来看个效果图 这里,我们添加了三个导航图标,因为我们有三个页面,微信小程序最多能加5个. 那他们是怎么出现怎么着色的呢?两步 ...

  10. [转] 微信小程序 页面跳转 传递参数

    本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...

随机推荐

  1. 使用python获取window注册表值的方法

    提供regfullpath的方法,可以自行封装个regpath的函数import loggingimport pywintypes import win32apiimport win32con def ...

  2. 齐博x1标签之无刷新显示更多

    示范代码如下: <div class="ListMoreInfos"> {qb:tag name="news_list_page_listdata02&quo ...

  3. "一键重装系统软件"操作流程

    博主之前重装系统都是直接用win10系统更新里的重置系统(版本不会变化),和U盘重装电脑出厂映像(有各种品牌自带的软件,而且由于是出场版本,版本很低) 所以这次用"小白一键重装系统" ...

  4. 基于.NetCore开发博客项目 StarBlog - (19) Markdown渲染方案探索

    前言 笔者认为,一个博客网站,最核心的是阅读体验. 在开发StarBlog的过程中,最耗时的恰恰也是文章的展示部分功能. 最开始还没研究出来如何很好的使用后端渲染,所以只能先用Editor.md组件做 ...

  5. 浅谈--ETCD的基本概念及用法

    1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. raft是一个强一致的集群日志同步算法. ETCD使用gRPC,网络 ...

  6. C#中下载项目中的文件

    1.将需要下载的文档添加到项目的文件夹中 2.接口部分 public IActionResult DownLoad() { var filePath = Directory.GetCurrentDir ...

  7. String基础: String两种创建对象方式的比较

    字符串常量 在一般的语言中常量一旦声明则不可改变,在java中的字符串常量是以匿名对象来表示的 javaz中字符串两种定义方法: String strA= new String("hello ...

  8. Unreal NetMode&NetRole 解析

    Version: Unreal 4.26 问题 为啥UE编辑器会有EPlayNetMode有三种让你选择. 为啥描述World 的ENetMode 会有4种,而不只是(Client/Server 2种 ...

  9. python-代码编程规范

    命名 常用简写 名称相关 # 信息 information: info # 功能 function : func # 数量 quantity:qty PYQT相关 button : btn_ chec ...

  10. Oracle设置内存参数后,启动数据库报ORA-00843 ORA-00849解决办法

    Oracle安装完成后,调优内存参数(MEMORY_TARGET和MEMORY_MAX_TARGET设置为0),重启数据库,报ORA-00843 ORA-00849错误. 根据提示,不应将MEMORY ...