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 相关文章推荐
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
May 13 Javascript
JavaScript标准对象_动力节点Java学院整理
Jun 27 Javascript
JS实现带动画的回到顶部效果
Dec 28 Javascript
微信小程序实现的动态设置导航栏标题功能示例
Jan 31 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
一文搞懂ES6中的Map和Set
May 20 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
Jun 05 Javascript
Vue + Elementui实现多标签页共存的方法
Jun 12 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 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
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
python实现划词翻译
2020/04/23 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
行政助理求职自荐信
2013/10/26 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
五一劳动节活动记录
2014/03/23 职场文书
房屋委托书范本
2014/04/04 职场文书
党委班子对照检查材料
2014/08/19 职场文书
与美同行演讲稿
2014/09/13 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
五年级作文之劳动作文
2019/11/12 职场文书