Vue项目配置微信分享

一、引入微信js

// index.html
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

二、封装wxshare.js

// assets => js => 新建 wxshare.js
export function wxShare ({title, desc, link, imgUrl,success}={}) {
  let wxShare = {
    title: title || '默认标题', // 分享标题
    desc: desc || '默认分享文案', // 分享描述
    link: link || window.location.href, // 分享链接
    imgUrl: imgUrl || 'https://cn.vuejs.org/images/logo.png', // 分享图标
    success: function () {
      // 用户点击了分享后执行的回调函数
      success && success()
    }
  }
  wx.ready(() => {   //需在用户可能点击分享按钮前就先调用
    // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
    // wx.updateAppMessageShareData(wxShare)
    // 自定义“分享到朋友圈”及“分享到qq空间”
    // wx.updateTimelineShareData(wxShare)

    // 以上新分享方法的成功回调不是转发成功回调,而是自定义内容成功回调
    //获取“分享给朋友”按钮点击状态及自定义分享内容接口(即将废弃)
    wx.onMenuShareAppMessage(wxShare);
    //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口(即将废弃)
    wx.onMenuShareTimeline(wxShare);
  })
  wx.error(res => {
    // config信息验证失败会执行error函数
    console.log(res)
  })
}

三、配置微信wx.config

// app.vue
 created(){
    this.wxShareConfig();
  },
  methods: {
    //配置微信转发
    wxShareConfig(){
      // 方便从接口中获取配置参数
      let appId = "wx7f963082054fe371";
      let nonceStr = "JrLvVC3ygqSlcBnc";
      let signature = "66c459474ebbea661b38be92149c5f60d91d05ed";
      let timestamp = "1592445883";
      // 配置信息
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appId, // 必填,公众号的唯一标识
        timestamp: timestamp, // 必填,生成签名的时间戳
        nonceStr: nonceStr, // 必填,生成签名的随机串
        signature: signature,// 必填,签名
        jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'] // 必填,需要使用的JS接口列表
      })
    }
  }

四、使用

  使用一:配置统一的分享内容

// main.js
import {wxShare} from './assets/js/wxshare';
// 为Vue的原型对象添加该方法,则所有vue实例都能继承该方法
Vue.prototype.$wxShare = wxShare
// App.vue
// 配置全局的分享
 created(){
    this.wxShareConfig();
  },
  methods: {
    //配置微信转发
    wxShareConfig(){
      // 方便从接口中获取配置参数
      let appId = "wx7f963082054fe371";
      let nonceStr = "JrLvVC3ygqSlcBnc";
      let signature = "66c459474ebbea661b38be92149c5f60d91d05ed";
      let timestamp = "1592445883";
      // 配置信息
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appId, // 必填,公众号的唯一标识
        timestamp: timestamp, // 必填,生成签名的时间戳
        nonceStr: nonceStr, // 必填,生成签名的随机串
        signature: signature,// 必填,签名
        jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'] // 必填,需要使用的JS接口列表
      })
      this.$wxShare();
    }
  }

  使用二: 每个模块都有固定的配置内容(在路由中配置固定的分享内容)

// App.vue
// 配置全局的分享
 created(){
    this.wxShareConfig();
  },
  methods: {
    //配置微信转发
    wxShareConfig(){
      // 方便从接口中获取配置参数
      let appId = "wx7f963082054fe371";
      let nonceStr = "JrLvVC3ygqSlcBnc";
      let signature = "66c459474ebbea661b38be92149c5f60d91d05ed";
      let timestamp = "1592445883";
      // 配置信息
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appId, // 必填,公众号的唯一标识
        timestamp: timestamp, // 必填,生成签名的时间戳
        nonceStr: nonceStr, // 必填,生成签名的随机串
        signature: signature,// 必填,签名
        jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'] // 必填,需要使用的JS接口列表
      })
    }
  }
// router/index.js
import {wxShare} from '@/assets/wxshare';

// 商品详情
  {
    path: '/productDetail',
    name: 'productDetail',
    component: ProductDetail,
    meta: {
      title: '商品详情',
      link: 'http://www.baidu.com',
      desc: '啊哈哈哈哈哈哈'
    }
  },

router.afterEach(route => {
  wxShare({ title: route.meta.title, desc: route.meta.desc, link: route.meta.link, imgUrl: route.meta.imgUrl})
})

  使用三:页面中单独修改分享内容 (如异步数据修改分享内容)

// 特定配置的页面
//
在vue实例的created钩子中
created(){
   this.$wxShare({
      title: '低头是泥污,抬头是彩虹',
      desc: '与你一同前行',
      success: () => {
         console.log('转发页面成功');
         //进行其他操作
      }
   })
},
// 或者 异步加载数据
created(){
axios.post('http://test.jjo.cn/api',params).then(res => {
this.$wxShare({
     title: res.title,
desc: res.desc,
...
   })
})
},

 

【实现】实现某一个页面配置单独的分享内容,其他页面内容一致

// wxshare.js
export function wxShare ({title, desc, link, imgUrl,success} = {}) {
    let wxShare = {
        title: title || '默认标题', // 分享标题
    desc:    desc || '默认分享文案', // 分享描述
    link:    link || window.location.href, // 分享链接
    imgUrl: imgUrl || 'https://cn.vuejs.org/images/logo.png', // 分享图标
    success: function () {
      // 用户点击了分享后执行的回调函数
      success && success()
    }
    }
  wx.ready(() => {   //需在用户可能点击分享按钮前就先调用
    // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
    // wx.updateAppMessageShareData(wxShare)
    // 自定义“分享到朋友圈”及“分享到qq空间”
    // wx.updateTimelineShareData(wxShare)

    // 以上新分享方法的成功回调不是转发成功回调,而是自定义内容成功回调
    //获取“分享给朋友”按钮点击状态及自定义分享内容接口(即将废弃)
    wx.onMenuShareAppMessage(wxShare);
    //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口(即将废弃)
    wx.onMenuShareTimeline(wxShare);
  })
  wx.error(res => {
    // config信息验证失败会执行error函数
    console.log(res)
  })
}
// App.vue
// 配置全局的分享
 created(){
    this.wxShareConfig();
  },
  methods: {
    //配置微信转发
    wxShareConfig(){
      // 方便从接口中获取配置参数
      let appId = "wx7f963082054fe371";
      let nonceStr = "JrLvVC3ygqSlcBnc";
      let signature = "66c459474ebbea661b38be92149c5f60d91d05ed";
      let timestamp = "1592445883";
      // 配置信息
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appId, // 必填,公众号的唯一标识
        timestamp: timestamp, // 必填,生成签名的时间戳
        nonceStr: nonceStr, // 必填,生成签名的随机串
        signature: signature,// 必填,签名
        jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'] // 必填,需要使用的JS接口列表
      })
      this.$wxShare();
    }
  }

详情页单独配置

// detail.vue
  created() {
    getProductDetail({ commodity_id: this.$route.query.commodity_id }).then(
      res => {
        if (res.data.code == 200) {
          this.productDetail = res.data.data;
          this.seletdStock = res.data.data.total_stock;
          this.scrollImgList = res.data.data.scroll_image;
          this.$wxShare({
              title: this.productDetail.name,
              desc: "仅售" + this.productDetail.sale_price + "元,立即抢购!",
              link: '',
              imgUrl: this.scrollImgList[0]
          });
        }
      }
    );
  },

运行效果:

首页分享

详情页分享

【注意】需要注意的是从详情页返回至首页再次分享,配置的分享标题、图片、链接仍然为详情页的内容

【处理】 在详情页销毁之前将配置的内容重置

  beforeDestroy() {
    this.$wxShare();
  },

 

posted @ 2020-06-18 11:43  rachelch  阅读(430)  评论(0编辑  收藏  举报