混入(mixin)

Vue3Vue2 的混入有较大的差别,下列以微信小程序通用分享为例做个示范;


mixin.ts

import type { App } from "vue";

// 分享配置
const config = {
    title: "默认分享标题",
    imageUrl: "", // 可空, 默认分享图片
};

/**
 * 对象到查询参数
 */
function objectToQuery(params: AnyObject) {
    return Object.keys(params)
        .map((key) => key + "=" + params[key])
        .join("&");
};

/**
 * 小程序分享混入
 */
const mixin = {
    // 分享给朋友
    onShareAppMessage() {
        // 获取当前页面路径与参数
        // @ts-ignore
        const route = ["/", this.$scope.route].join("");
        // @ts-ignore
        const options = this.$scope.options;
        const query = objectToQuery(options);
        const path = route + "?" + query;

        const shareData = { ...config, ...{ path } };
        return shareData;
    },

    // 分享到朋友圈
    onShareTimeline() {
        // 获取当前页面参数
        // @ts-ignore
        const options = this.$scope.options;
        const query = objectToQuery(options);
        const shareData = { ...config, ...{ query, imageUrl: "" } }; // 默认 imageUrl 为空(使用小程序 logo)

        return shareData;
    }
};

export default mixin

main.ts

import { createSSRApp } from "vue";
import App from "./App.vue";
import mixin from "./mixin.ts";

export function createApp() {
    const app = createSSRApp(App);
    app.mixin(mixin);
    return { app };
}


 



 


Tip

如何自定义某个页面的分享参数?

答:在 onLoad 事件里自己使用 onShareAppMessage 进行配置;

onLoad(() => {
    onShareAppMessage(() => {
        return { ... };
    });
});

 
 
 

Last Updated:
Contributors: 余小波