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 相关文章推荐
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
Jun 28 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
判断客户浏览器是否支持cookie的示例代码
Dec 23 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
Jun 23 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
Jan 12 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 Javascript
Vuejs第十三篇之组件——杂项
Sep 09 Javascript
node跨域请求方法小结
Aug 25 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
vue-router结合vuex实现用户权限控制功能
Nov 14 Javascript
Vue实现导航栏菜单
Aug 19 Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 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
BBS(php &amp; mysql)完整版(八)
2006/10/09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
2009/11/12 PHP
批量实现面向对象的实例代码
2013/07/01 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Python中实现常量(Const)功能
2015/01/28 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python检测生僻字的实现方法
2016/10/23 Python
Django 实现下载文件功能的示例
2018/03/06 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python查看列的唯一值方法
2018/07/17 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python浪漫表白源码
2019/04/05 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
浅析python redis的连接及相关操作
2019/11/07 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
教师实习自我鉴定
2013/12/18 职场文书
白血病捐款倡议书
2014/05/14 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python