2***@qq.com
2***@qq.com
  • 发布:2022-07-08 08:47
  • 更新:2022-07-08 10:20
  • 阅读:680

【报Bug】vue3 用全局mixin进行绑定onShareAppMessage

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: window11

HBuilderX类型: Alpha

HBuilderX版本号: 3.5.1

第三方开发者工具版本号: 1.06.2206090

基础库版本号: 2.24.2

项目创建方式: HBuilderX

示例代码:

vue3 用全局mixin进行绑定onShareAppMessage后,如果page里有其他组件的情况下,全局onShareAppMessage将会触发多次,造成page修改了mixin的参数,组件却没有修改,造成page自定义分享不生效

操作步骤:

vue3 用全局mixin进行绑定onShareAppMessage后,如果page里有其他组件的情况下,全局onShareAppMessage将会触发多次,造成page修改了mixin的参数,组件却没有修改,造成page自定义分享不生效

预期结果:

希望组件不要触发onShareAppMessage方法

实际结果:

组件触发覆盖了页面级别的分享

bug描述:

vue3 用全局mixin进行绑定onShareAppMessage后,如果page里有其他组件的情况下,全局onShareAppMessage将会触发多次,造成page修改了mixin的参数,组件却没有修改,造成page自定义分享不生效。又不想每个页面单独引入mixin,那样太不好维护了

2022-07-08 08:47 负责人:无 分享
已邀请:
十二112

十二112

有示例demo吗

  • 2***@qq.com (作者)

    马上,我写一个。。。。

    2022-07-08 09:10

  • 十二112

    回复 2***@qq.com: ok

    2022-07-08 09:10

  • 2***@qq.com (作者)

    回复 十二112: 我在下面传了一个demo。麻烦看看呢,使用全局分享的页面我就不想每个页面去引了,所以使用了minxin,但是页面有组件也是很正常的事情

    2022-07-08 09:24

  • 十二112

    回复 2***@qq.com: 这个是因为组件也被混入了,导致后面的onShareAppMessage覆盖了前面的

    2022-07-08 09:39

  • 2***@qq.com (作者)

    回复 十二112: 对,我也猜测是这样。想过每个页面去单独引入mixin,但是太麻烦了。有什么办法可以解决吗?既可以直接全局分享,也可以自定义分享。

    2022-07-08 09:42

  • 十二112

    回复 2***@qq.com: 我先试试

    2022-07-08 09:47

  • 2***@qq.com (作者)

    回复 十二112: 万分感谢

    2022-07-08 09:49

  • 十二112

    回复 2***@qq.com: 修改一下混入文件,试试

    2022-07-08 10:18

2***@qq.com

2***@qq.com (作者)

这是bug复现demo

十二112

十二112

//mixin.js  
export const shareMixin =  {  
    onShareAppMessage() {  
        return this.shareParams  
    },  
    computed: {  
        shareParams() {  
            const page = getCurrentPages()[getCurrentPages().length - 1]  
            return page ? page.shareOptions : {}  
        },  
        currentPage: {  
            get() {  
                return getCurrentPages()[getCurrentPages().length - 1]  
            },  
            set(val) {  
                const page = getCurrentPages()[getCurrentPages().length - 1]  
                Object.keys(val).forEach(e => {  
                    page.shareOptions[e] = val[e]  
                    console.log(page.shareOptions)  
                })  
            }  
        },  
    },  
    created() {  
        const page = getCurrentPages()[getCurrentPages().length - 1]  
        if(page && !page.shareOptions) {  
            page.shareOptions = {  
                title: '全局分享',  
                path: '/pages/home/home'  
            }  
        }  
    }  
}  
// 页面或者组件中修改  
<script>  
    // 把组件注释了就可以自定义了。。。。。。。。。。  
    export default {  
        created() {  
                        // 修改传入对象形式,修改哪个参数传哪个参数,可传入多个  
            this.currentPage = {  
                title: '局部111分享'  
            }  
        },  
    }  
</script>
  • 2***@qq.com (作者)

    可以,谢谢大佬

    2022-07-08 10:25

  • 十二112

    回复 2***@qq.com: 不客气

    2022-07-08 10:26

该问题目前已经被锁定, 无法添加新回复