Vue项目全局配置微信分享思路详解


Posted in Javascript onMay 04, 2018

这个项目为移动端项目,主要用于接入公众号服务。项目采用两种登录方式,微信授权登录以及账号密码登录。对于移动端项目而言,为了便于项目扩展以及提供开发热更新速度,项目分为不同的模块,每个模块是一个单页面应用。页面分为两种,一种是需要用户登录之后才能浏览,另一种是用户无需登录即可浏览。无论哪一种,均配置微信分享。

使用的技术

1.使用vue作为框架
2.使用vux作为UI组件库

全局配置微信分享思路

1.区分一般和特殊,一般情况,全局配置默认分享文案;特殊情况分两种,一种是分享内容不需要异步获取,则在路由跳转时配置,另一种是分享内容需要异步获取,则需要待异步内容获取后更新分享内容。

2.不需要异步获取的内容我们采用定义在路由元信息的方式,直接在每次路由跳转之后调用公共函数更新分享内容。

具体可以查看微信JSSDK的使用说明

// wxShare.js
import Vue from 'vue'
// 在组件外使用vux集成的微信jssdk
import { WechatPlugin, AjaxPlugin } from 'vux'
Vue.use(WechatPlugin)
Vue.use(AjaxPlugin)
export default function wxShare ({title, desc, timelineTitle, link, imgUrl} = {}) {
  Vue.wechat.config({
   debug: false,
   appId: appId,
   timestamp: timestamp,
   nonceStr: nonceStr,
   signature: signature,
   jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline']
  })
  Vue.wechat.ready(() => {
   Vue.wechat.onMenuShareAppMessage({
    title: title, // 分享标题
    desc: desc || '默认分享文案', // 分享描述
    link: link || window.location.href, // 分享链接
    imgUrl: imgUrl || '图标地址(必须是有效的Link)' // 分享图标
   })
   Vue.wechat.onMenuShareTimeline({
    title: timelineTitle || desc || '默认分享文案', // 分享标题,由于分享到朋友圈没有desc,所以这里采用的策略是,指定的朋友圈分享标题优先,其次采用发送给朋友的描述,最后采用默认文案。
    link: link || window.location.href, // 分享链接
    imgUrl: imgUrl || '图标地址(必须是有效的Link)' // 分享图标
   })
  })
  Vue.wechat.error((res) => {
  })
}
// 为Vue的原型对象添加该方法,则所有vue实例都能继承该方法
Vue.prototype.$wxShare = wxShare
// router/index.js 每个模块都有自己内部的路由配置
// codes...
const routes = [
  {
    path: '/index',
    name: 'index',
    redirect: '/index/homepage',
    children: [
     {
      path: '/index/homepage',
      name: 'homepage',
      component: homepage
      meta: { 
        title: '这是主页', 
        shareDesc: '这是本站的主页', 
        desc: 'homepage, click and see!',
        timelineTitle: '这是首页,欢迎点击关注,blablablablabla~~~',
        imgUrl: 'http://frankzhang.me/wp-content/uploads/2017/08/cropped-favicon-01.png'
      }
     },
    ]
   }
]
// routerRule,公共路由配置,所有模块共用一个路由控制策略
import wxShare from '@/utils/wxShare'
export default function routerRule (router) {
  // other codes...
  router.afterEach(( to, from ) => {
    wxShare({ title: to.meta.title, desc: to.meta.shareDesc, link: to.meta.shareLink, logo: to.meta.shareLogo})
   })
}
// main.js
import routerRule from ...
routerRule(router)

经过上面的配置,router.afterEach都会调用一次wxShare,重新读取router中的meta的信息重新定义微信分享内容,达到全局配置和特殊配置结合的目的。

需要异步获取的分享内容

这种情况,我们采取在vue实例的created钩子中,在获取数据的成功回调中调用一次wxShare即可

// homepage.vue
<script>
export default {
  data() {
    return {
    }
  },
  created() {
    getHomepageInfo()
      .then( res => {
        this.$wxShare({
          title: res.title,
          desc: res.desc,
          imgUrl: res.logo
        })
      } )
  }
}
</script>

需要注意的坑点

1.如果项目采用非history模式,则需要去掉url上#后的部分传给后端换取微信签名。

2.根据微信官方说明:

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用...

由于SPA应用,url变化之后,需要重新config一次,重新注入当前页面的配置信息,因此这个步骤必须在router.afterEach中调用!因为根据vue-router的说明,在导航被确认之后,再调用全局的afterEach钩子,这个时候导航已经确认了,url已经改变,可以针对更新后的url重新获取微信签名了。

总结

以上所述是小编给大家介绍的Vue项目全局配置微信分享思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
css把超出的部分显示为省略号的方法兼容火狐
Jul 23 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
Mar 05 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
AngularJS入门教程(零):引导程序
Dec 06 Javascript
使用jquery插件qrcode生成二维码
Oct 22 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
Vuex 使用及简单实例(计数器)
Aug 29 Javascript
解决JS表单验证只有第一个IF起作用的问题
Dec 04 Javascript
vue项目中引入vue-datepicker插件的详解
May 14 Javascript
浅谈react-router@4.0 使用方法和源码分析
Jun 04 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
uni-app实现获取验证码倒计时功能
Nov 01 Javascript
vue嵌套路由与404重定向实现方法分析
May 04 #Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 #Javascript
详解使用jQuery.i18n.properties实现js国际化
May 04 #jQuery
node实现的爬虫功能示例
May 04 #Javascript
基于jQuery.i18n实现web前端的国际化
May 04 #jQuery
JavaScript实现百度搜索框效果
Mar 26 #Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 #Javascript
You might like
第十节--抽象方法和抽象类
2006/11/16 PHP
PHP 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
php设计模式之单例模式代码
2016/06/11 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
Python迭代器与生成器用法实例分析
2018/07/09 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python内置数据类型之列表操作
2018/11/12 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
如何理解python面向对象编程
2020/06/01 Python
python 如何停止一个死循环的线程
2020/11/24 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
Sony C++笔试题
2013/03/10 面试题
几个数据库方面的面试题
2016/07/01 面试题
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
情侣吵架检讨书
2014/02/05 职场文书
实用的简历自我评价
2014/03/06 职场文书
感恩寄语大全
2014/04/11 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
学习保证书100字
2015/02/26 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript