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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
基于jQuery的仿flash的广告轮播代码
Nov 04 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
Bootstrap 3 进度条的实现
Feb 22 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 Javascript
浅析从vue源码看观察者模式
Jan 29 Javascript
layui 实现表格某一列显示图标
Sep 19 Javascript
JavaScript canvas实现雪花随机动态飘落
Feb 08 Javascript
原生js实现随机点名
Jul 05 Javascript
vue使用element-ui按需引入
May 20 Vue.js
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
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP 采集获取指定网址的内容
2010/01/05 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
vue实现文件上传功能
2018/08/13 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
详解Python中break语句的用法
2015/05/14 Python
Python制作简易注册登录系统
2016/12/15 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python中的默认参数实例分析
2018/01/29 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
《埃及的金字塔》教学反思
2014/04/07 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
退休欢送会致辞
2015/07/31 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python