copy_paste
copy_paste
  • 发布:2023-09-07 17:44
  • 更新:2023-10-11 09:43
  • 阅读:392

Vue3 项目设置微信H5、微信小程序全局分享

分类:uni-app

Vue3 项目设置微信H5、微信小程序全局分享。

该方法为使用 mixins 解决全局分享。
虽然在Vue3中新增了组合式API,理应使用组合式API解决问题,但是的确没有想到更好的解决方法。

第一步:新建设置全局分享的 mixin 文件;share/mixin.ts

import { last, map, join } from 'lodash';  
export default {  
    // #ifdef MP  
    // 设置该页面的分享信息 share  
    onShareAppMessage() {  
        let view = last(getCurrentPages());  
        let mp = view?.$vm.shareData.mp;  
        return {  
            title: mp.title,  
            path: mp.path,  
            imageUrl: mp.imgUrl,  
        };  
    },  
    // 监听用户点击右上角转发到朋友圈  
    onShareTimeline() {  
        let view = last(getCurrentPages());  
        let mp = view?.$vm.shareData.mp;  
        return {  
            title: mp.title,  
            query: join(map(mp.query, (value, key) => {  
                return `${key}=${value}`;  
            }), '&'),  
            imageUrl: mp.imgUrl,  
        };  
    },  
    // #endif  
    onLoad() {  
        this.shareData = {  
            h5: {  
                // 分享标题  
                title: '',  
                // 分享描述  
                des: '',  
                // 分享图标  
                imgUrl: '',  
                // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致  
                link: '',  
            },  
            mp: {  
                // 转发标题 默认值(当前小程序名称)  
                title: '',  
                // 转发路径 必须是以 / 开头的完整路径  
                path: '',  
                // 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4。  
                imgUrl: '',  
                // 自定义页面路径中携带的参数  
                query: {},  
            },  
        };  
    },  
    onShow() {  
        // #ifdef H5  
        let view = last(getCurrentPages());  
        let shareData = view?.$vm.shareData;  
        if (shareData) {  
            wx.onMenuShareTimeline(shareData.h5)  
            wx.onMenuShareAppMessage(shareData.h5);  
        wx.updateAppMessageShareData(shareData.h5);  
        wx.updateTimelineShareData(shareData.h5);  
        }  
        // #endif  
    },  
};

第二步,在 main.ts 文件中使用分享mixin.ts

// 项目文件路径  
import shareMixin from '@/common/mixin/share/mixin';  
export function createApp() {  
  const app = createSSRApp(App);  
  app.mixin(shareMixin);  
  return {  
    app,  
  };  
}

第三步,新建用于更新页面分享的函数。/share/index.ts

import { each, assign, last, } from 'lodash';  
import { nextTick } from 'vue';  

interface shareDataType {  
    h5?: {  
        // 分享标题  
        title?: string,  
        // 分享描述  
        des?: string,  
        // 分享图标  
        imgUrl?: string,  
        // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致  
        link?: string,  
    },  
    mp?: {  
        // 转发标题 默认值(当前小程序名称)  
        title?: string,  
        // 转发路径 必须是以 / 开头的完整路径  
        path?: string,  
        // 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4。  
        imgUrl?: string,  
        // 自定义页面路径中携带的参数  
        query?: object,  
    },  
}  

export const defineShare = async function (options: shareDataType) {  
    // 用于规避 setup 直接调用的情况  
    await nextTick();  
    let view = last(getCurrentPages());  
    let shareData = view?.$vm.shareData;  
    each(options, (value, key) => {  
        assign(shareData[key], value);  
    })  
    // #ifdef H5  
    wx.onMenuShareTimeline(shareData.h5)  
    wx.onMenuShareAppMessage(shareData.h5);  
    wx.updateAppMessageShareData(shareData.h5);  
    wx.updateTimelineShareData(shareData.h5);  
    // #endif  
}  

第四步,使用更新分享的函数

import { defineShare } from '@/common/mixin/share/index';  
defineShare({  
    mp: {  
        title: 'title'  
    }  
});
0 关注 分享

要回复文章请先登录注册

王翔

王翔

能不能出个v2的文档?
2023-10-11 09:43