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


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 相关文章推荐
js no-repeat写法 背景不重复
Mar 18 Javascript
javascript arguments 传递给函数的隐含参数
Aug 21 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
Feb 25 Javascript
优化Node.js Web应用运行速度的10个技巧
Sep 03 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
Oct 01 Javascript
3种js实现string的substring方法
Nov 09 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
JS中的BOM应用
Feb 02 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
vue计算属性get和set用法示例
Feb 08 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项目应该注意的几点事项分享
2013/12/20 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
原生js 秒表实现代码
2012/07/24 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
深入学习python多线程与GIL
2019/08/26 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
您的网上新华书店:文轩网
2016/08/24 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
模范教师事迹材料
2014/12/16 职场文书
汇报材料怎么写
2014/12/30 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers