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


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 相关文章推荐
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
javascript实现动态统计图开发实例
Nov 21 Javascript
vue实现登录后页面跳转到之前页面
Jan 07 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 jQuery
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 jQuery
bootstrap datepicker的基本使用教程
Jul 09 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
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
微信小程序实现城市列表选择
2018/06/05 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
ubuntu安装mysql pycharm sublime
2018/02/20 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
python求绝对值的三种方法小结
2019/12/04 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
中文系师范生自荐信
2013/10/01 职场文书
创意活动策划书
2014/01/15 职场文书
培训师岗位职责
2015/02/14 职场文书
法律服务所工作总结
2015/08/10 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书