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


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 相关文章推荐
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
javascript实现全角与半角字符的转换
Jan 07 Javascript
30分钟快速掌握Bootstrap框架
May 24 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
Nov 11 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
Sep 04 Javascript
Vue.js 十五分钟入门图文教程
Sep 12 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
一篇文章,教你学会Vue CLI 插件开发
Apr 17 Javascript
javascript操作元素的常见方法小结
Nov 13 Javascript
Vuex模块化应用实践示例
Feb 03 Javascript
Vue this.$router.push(参数)实现页面跳转操作
Sep 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
DedeCms模板安装/制作概述
2007/03/11 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
javascript 读取图片文件的大小
2009/06/25 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
python机器人行走步数问题的解决
2018/01/29 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
Django model select的多种用法详解
2019/07/16 Python
python实现用户名密码校验
2020/03/18 Python
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
开办化妆品公司创业计划书
2013/12/26 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
法人授权委托书
2014/09/16 职场文书
财务部岗位职责范本
2015/04/14 职场文书
推广普通话的宣传语
2015/07/13 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python