<template>  
    <view>  
        未开启virtualHost  
        <button type="primary" @click="test">组件emit-click</button>  
    </view>  
</template>  
<script setup>  
    const emits = defineEmits(['click'])  
    function test() {  
        emits('click')  
    }  
</script>  
<style>  
</style> 
                                        
                                    
                                    - 发布:2024-06-27 11:50
- 更新:2025-07-09 20:06
- 阅读:1017
产品分类: uniapp/小程序/抖音
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: windows11
第三方开发者工具版本号: 4.2.5
基础库版本号: 3.24.0.5
项目创建方式: CLI
CLI版本号: 3.0.0-alpha-4020120240618002
示例代码:
                                    
                                    
                                         
                                
                                                                                                操作步骤:
                                    
                                        <template>  
    <view>  
        emit事件在开启virtualHost时无法正确触发  
        <emit-demo-virtual @virtualClick="virtualClick"></emit-demo-virtual>  
        <emit-demo @click="test"></emit-demo>  
    </view>  
</template>  
<script setup>  
    import emitDemoVirtual from '../../components/emit-demo/emit-demo-virtual.vue';  
    function virtualClick() {  
        uni.showModal({  
            title: '提示',  
            content: 'virtualHost点击',  
        });  
    }  
    function test() {  
        uni.showModal({  
            title: '提示',  
            content: '常规点击',  
        });  
    }  
</script>  
<style>  
</style>  
                                     
                                
                                                                                                <template>  
    <view>  
        emit事件在开启virtualHost时无法正确触发  
        <emit-demo-virtual @virtualClick="virtualClick"></emit-demo-virtual>  
        <emit-demo @click="test"></emit-demo>  
    </view>  
</template>  
<script setup>  
    import emitDemoVirtual from '../../components/emit-demo/emit-demo-virtual.vue';  
    function virtualClick() {  
        uni.showModal({  
            title: '提示',  
            content: 'virtualHost点击',  
        });  
    }  
    function test() {  
        uni.showModal({  
            title: '提示',  
            content: '常规点击',  
        });  
    }  
</script>  
<style>  
</style>  
预期结果:
                                    
                                    
                                        click
upload
                                     
                                
                                                                                                click
upload
实际结果:
                                    
                                    
                                        无console
                                     
                                
                                                            无console
bug描述:
vue3编译到抖音小程序开启virtualHost导致emit事件失效,还有之前inject失效的问题
抖音小程序:
vue2:inject、provide不生效;emit和watch没问题
vu3:inject、provide不生效;emit页面接收不到事件,watch导致页面卡死
最佳回复
 
                                                                    
                                                                DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
更新:
之前我们在其他帖子交流过,这里做一个合并回答。你在 demo 中提到了两个问题,开启虚拟节点之后,抖音小程序有两个问题,一个是无法相应 emit,一个是 watch 会死循环。
第一个无法 emit 的问题
经过我实际验证和调试,目前在抖音、飞书系小程序平台使用 fragment 会收到比较大的限制。
https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/framework/custom-component/component-model-and-style/
当启用 virtualHost 时候自定义组件的事件等方法都会自动失效,目前没有更好的办法改造编译,从你提供的案例看,使用非 virtualHost 更适合你的开发习惯,你可以针对飞书、头条平台编写条件判断绕过单一平台的限制。
第二个问题已经修复,你可以参考下面方式来参考。
这个提交后续会发版生效,在发版之前,你可以通过下面方式来使用修复后的代码。
解压下面压缩包,替换到 HBuilderX 或者 CLI 的 node_moduels 的下面目录
HBuilderX 安装目录: /Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-toutiao/dist
cli node_moduels 目录 node_modules/@dcloudio/uni-mp-toutiao/dist
 
             
             
             
			
 
                                                                     
            
DCloud_UNI_OttoJi
此问题标记为bug 已修复。在抖音小程序平台可以设置 provide/inject 时候设置 onMounted 接受处理。
2025-08-13 16:55