微信小程序封装分享与分销功能过程解析


Posted in Javascript onAugust 13, 2019

前言

在微信小程序中,可以很简单的分享一个页面,比微信H5简单多了,然而,分享出去的页面(也叫卡片),打开后只是一个单独的页面,没有底部导航栏,点击返回按钮的时候就直接退出小程序了。如果需要去到首页,还必须点击顶部胶囊的“回到首页”,可是该功能很少人知道。

为了解决这个问题,有两种解决方案。

第一种:在分享的页面在添加显眼的“首页”悬浮按钮,点击按钮跳转到首页。这种方法,好容易理解,可是万一页面多,需要开发不少这样的悬浮按钮,而且点击返回依旧是退出小程序。

第二种:分享的时候不是分享本页面,而是分享首页的链接,不过在链接上带上本页面的参数,打开卡片号进入首页,首先判断参数,符合要求的直接跳转到目标页面。这个的好处是不需要修改ui效果,只需要在分享接口上做些处理,而且还支持返回首页;缺点是会从首页一闪到目标页面。

同时,如果小程序涉及到分享功能的,需要记录我是谁邀请进来的,那么就需要在分享参数中加上自己的分享id,综合考虑后第二种方式更合适。

第一步:创建分享配置文件pageshare.js

该文件的模块包含五个属性,分别是config数组(页面路径和页面id数组)、find方法(通过id查找页面路径的方法)、build(创建分享参数的方法,如返回页面id、分享id、文章id等)、baseshare(基础分享方法,返回微信分享所需的对象)

module.exports = {
config: [{
pageId: 1,
pageUrl: "/pages/home/home",
isTab: true,
isHome: true
}],
/**
查找相应的页面
@pageId 页面id
*/
find: function(pageId) {
let result = this.config[0];
this.config.forEach(item => {
 if (item.pageId.toString() === pageId.toString()) {
  result = item;
 }
});
return result;
},
/**
创建分享参数
@obj 分享键值对
[默认内置salesmanId或shareId]
*/
build: function(obj) {
if (!(obj instanceof Object)) {
 obj = {};
}
let userInfo = getApp().globalData.userInfo;
if (userInfo.is_salesman) {
 obj.salesmanId = userInfo.salesman_info.id;
} else {
 obj.shareId = userInfo.id;
}
let params = [];
for (let name in obj) {
 params.push(name + "=" + obj[name]);
}
return params.join("&");
},
/**
基础分享
@title 标题
@params url参数
@imageUrl 图片[默认截图]
*/
baseshare: function({
title,
params,
imageUrl
}) {
return {
 title: title,
 path: "/pages/home/home?" + this.build(params),
 imageUrl: imageUrl || ""
}
}
}

PS:config与小程序的页面一一对应,需要手动配置。

第二步:引入pageshare.js文件

const Pageshare = require("../../../utils/pageshare");//在需要做分享的页面引入该文件

第三步:配置分享信息

在需要做分享的页面中修改分享信息

onShareAppMessage: function() {
return Pageshare.baseshare({
 title: this.data.course.title, //标题
 params: {
  pageId: 12,          //页面id
  source: "微信小程序课程分享", //自定义参数
  id: this.data.course.id        //自定义参数
 }
});
}

pageshare底层默认添加了分享人等基本参数,所以这里不需要添加

第四步:App.js获取页面参数(点击卡片打开时)

在用户B点击用户A分享的链接时,app.js触发以下代码

微信小程序封装分享与分销功能过程解析

微信小程序封装分享与分销功能过程解析

到这里完成了分享人信息的绑定。

第五步:home页面获取到请求参数,进行二次跳转

从分享配置中可以知道,分享的路径是首页,然后带上自定义参数和分享参数

微信小程序封装分享与分销功能过程解析

那么用户B打开用户A发的链接时,会打开home页面,所以我们在home中做参数判断,如下:

微信小程序封装分享与分销功能过程解析

微信小程序封装分享与分销功能过程解析

shareRedirect: function(share) {
if (share.pageId != null) {
 let sharePage = Pageshare.find(share.pageId);
 let params = [];
 for (let name in share) {
  if (name !== "pageId") {
   params.push(name + "=" + share[name]);
  }
 }
 if (sharePage.isTab && !sharePage.isHome) {
  wx.switchTab({
   url: sharePage.pageUrl + "?" + params.join("&")
  });
 } else {
  wx.navigateTo({
   url: sharePage.pageUrl + "?" + params.join("&")
  });
 }
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
学习JavaScript设计模式(接口)
Nov 26 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
探究Vue.js 2.0新增的虚拟DOM
Oct 20 Javascript
基于vue的下拉刷新指令和滚动刷新指令
Dec 23 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
JavaScript实现左侧菜单效果
Dec 14 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
ztree+ajax实现文件树下载功能
May 18 Javascript
node删除、复制文件或文件夹示例代码
Aug 13 #Javascript
vue实现下拉加载其实没那么复杂
Aug 13 #Javascript
vue中created和mounted的区别浅析
Aug 13 #Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 #Javascript
微信小程序使用npm包的方法步骤
Aug 13 #Javascript
Vue中的transition封装组件的实现方法
Aug 13 #Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 #Javascript
You might like
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
js中this对象用法分析
2018/01/05 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
中专毕业生自荐信
2013/11/16 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书