uni-app
uni-app copied to clipboard
uni-app 编译到抖音mp-toutiao平台组件开启virtualHost后event不会触发
hbuilderX版本:4.22.2024062415-alpha
复现demo:toutiao-vue3-virtualhost
问题描述:
当组件开启了virtualHost后,运行到mp-toutiao平台,无法触发定义的test事件。 组件代码:
<template>
<view class="test" @click="handleClick">点我测试</view>
</template>
<script lang="ts">
export default {
name: 'virtual-host-cmp',
options: {
addGlobalClass: true,
virtualHost: true,
styleIsolation: 'shared'
}
}
</script>
<script lang="ts" setup>
const emit = defineEmits(['test'])
function handleClick() {
emit('test')
}
</script>
使用:
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
<virtual-host-cmp @test="handleTest"></virtual-host-cmp>
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
handleTest(){
uni.showToast({
title:'点到了'
})
}
}
}
</script>
补充:4.15~4.22均可以复现该问题。
相关issue:#4969 #4699
编译到抖音平台真是一步一个坑
在小程序自定义组件中,其options里面存在一个属性virtualHost,可以控制将该组件的节点虚拟化,即设置 virtualHost: true ,这样就能将该自定义组件默认的一层节点去除,使外部设置的flex布局能直接作用于该组件内部的节点。
在小程序自定义组件中,其options里面存在一个属性virtualHost,可以控制将该组件的节点虚拟化,即设置 virtualHost: true ,这样就能将该自定义组件默认的一层节点去除,使外部设置的flex布局能直接作用于该组件内部的节点。
是的,目前就是自定义组件开启了virtualHost,然后自定义组件定义的事件都失效了。
开启了virtualHost,自定义组件默认一层都没有了,怎么会显示事件呢,不仅事件属性也不会显示了
开启了virtualHost,自定义组件默认一层都没有了,怎么会显示事件呢,不仅事件属性也不会显示了
这个原因是开启了virtualHost,emit事件在父组件或者页面中接收不到
开启了virtualHost,自定义组件默认一层都没有了,怎么会显示事件呢,不仅事件属性也不会显示了
微信是可以的,可以参考我附件的例子或者我贴的代码,在自定义组件中定义test事件,点击自定义组件时触发该事件。目前来说编译到toutiao,外部就无法接收到自定义组件的emit了。
可以这么说,因为它的
<virtual-host-cmp @test="handleTest"></virtual-host-cmp>压根就没有,直接是内部的内容
uni-app应该是使用这个属性Fragment 来实现toutiao小程序平台的virtualHost的吧,其实它和微信的virtualHost实现并不是一致的,这就造成之前写了virtualHost的组件,更新到指定版本uni-app之后在抖音平台得到了截图中所有的副作用
可以这么说,因为它的
<virtual-host-cmp @test="handleTest"></virtual-host-cmp>压根就没有,直接是内部的内容
根据这个说法,去验证了props下发现,传递给组件props,如果页面修改了props导致模拟器直接卡死
抖音小程序自身对Fragment 组件节点有特殊限制,是不是意味着如果开启virtualHost,不能使用emit等事件,props传递也会出现问题,这个uniapp编译到抖音平台能处理吗,不然virtualHost没多大的意义
抖音小程序自身对Fragment 组件节点有特殊限制,是不是意味着如果开启virtualHost,不能使用emit等事件,props传递也会出现问题,这个uniapp编译到抖音平台能处理吗,不然virtualHost没多大的意义
意义就是需要在virtualHost上加个条件编译了,不要再抖音平台使用virtualHost🐶
抖音小程序自身对Fragment 组件节点有特殊限制,是不是意味着如果开启virtualHost,不能使用emit等事件,props传递也会出现问题,这个uniapp编译到抖音平台能处理吗,不然virtualHost没多大的意义
意义就是需要在virtualHost上加个条件编译了,不要再抖音平台使用virtualHost🐶
尴尬,抖音平台强隔离,没有类似微信apply-shared能力,所有样式只能写在组件内部
这个issue关闭了,抖音平台目前千万不要开启virtualHost。