XFXFX
XFXFX
  • 发布:2024-08-21 18:35
  • 更新:2024-08-22 10:52
  • 阅读:98

mixin的局部覆盖问题

分类:uni-app

vue3版本 TS + setup语法糖

main.ts中mixin了全局分享

import type { App } from 'vue';  

// #ifdef MP-WEIXIN  
import { globalOnShareAppMessage } from './mp-share';  
// #endif  

export const setupMixin = (app : App) => {  
    // #ifdef MP-WEIXIN  
    app.mixin(globalOnShareAppMessage);  
    // #endif  
}
const { VUE_APP_NAME } = process.env;  

export const globalOnShareAppMessage = {  
    onShareAppMessage(){  
        console.log("mixin的onShareAppMessage")  
        const share = {  
          title: VUE_APP_NAME,  
          path: '/pages/index',  
          imageUrl: '/static/logo.png'  
        };  

        return share;  
    }  
}

当局部的onShareAppMessage再次使用的时候 执行在mixin之前,如何让局部的方法覆盖mixin呢?

2024-08-21 18:35 负责人:无 分享
已邀请:
XFXFX

XFXFX (作者)

局部代码

<script lang="ts" setup>  
    import {  
        onLoad  
        // #ifdef MP-WEIXIN  
        , onShareAppMessage  
        // #endif  
    } from '@dcloudio/uni-app';  

    // #ifdef MP-WEIXIN  
    onShareAppMessage(() => {  
        console.log("mySpu的onShareAppMessage");  
                .......其他代码  
    })  
    // #endif  
</script>
6***@qq.com

6***@qq.com

终于看到同样的问题了 问题是因为底层注册hook函数的时候,setup 函数中的onload调用 先于 mixin公用的注册。 目前只有先不用组合式了

6***@qq.com

6***@qq.com

这个属于vue3的底层实现,setup里边的生命周期会比mixin先执行,参考:

可以自己绕一下

<script lang="ts" setup>
import { onShareAppMessage, onReady } from "@dcloudio/uni-app";
onReady(() => {
onShareAppMessage(() => {
return {
title: "自定义分享标题",
path: "/pages/home/index",
};
});
})
</script>

6***@qq.com

6***@qq.com

https://github.com/vuejs/core/issues/5918

要回复问题请先登录注册