Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

uni-app 编译到抖音mp-toutiao平台组件开启virtualHost后event不会触发 #5006

Open
Moonofweisheng opened this issue Jun 25, 2024 · 12 comments

Comments

@Moonofweisheng
Copy link

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>
@Moonofweisheng
Copy link
Author

补充:4.15~4.22均可以复现该问题。

@Moonofweisheng
Copy link
Author

相关issue:#4969 #4699

@YaWeiBoy
Copy link

编译到抖音平台真是一步一个坑

@Moonofweisheng Moonofweisheng changed the title uni-app 编译到mp-toutiao平台组件开启virtualHost后event不会触发 uni-app 编译到抖音mp-toutiao平台组件开启virtualHost后event不会触发 Jun 27, 2024
@GRCmade
Copy link

GRCmade commented Jul 4, 2024

在小程序自定义组件中,其options里面存在一个属性virtualHost,可以控制将该组件的节点虚拟化,即设置 virtualHost: true ,这样就能将该自定义组件默认的一层节点去除,使外部设置的flex布局能直接作用于该组件内部的节点。

@Moonofweisheng
Copy link
Author

在小程序自定义组件中,其options里面存在一个属性virtualHost,可以控制将该组件的节点虚拟化,即设置 virtualHost: true ,这样就能将该自定义组件默认的一层节点去除,使外部设置的flex布局能直接作用于该组件内部的节点。

是的,目前就是自定义组件开启了virtualHost,然后自定义组件定义的事件都失效了。

@GRCmade
Copy link

GRCmade commented Jul 4, 2024

开启了virtualHost,自定义组件默认一层都没有了,怎么会显示事件呢,不仅事件属性也不会显示了

@YaWeiBoy
Copy link

YaWeiBoy commented Jul 4, 2024

开启了virtualHost,自定义组件默认一层都没有了,怎么会显示事件呢,不仅事件属性也不会显示了

这个原因是开启了virtualHost,emit事件在父组件或者页面中接收不到

@Moonofweisheng
Copy link
Author

开启了virtualHost,自定义组件默认一层都没有了,怎么会显示事件呢,不仅事件属性也不会显示了

微信是可以的,可以参考我附件的例子或者我贴的代码,在自定义组件中定义test事件,点击自定义组件时触发该事件。目前来说编译到toutiao,外部就无法接收到自定义组件的emit了。

@Moonofweisheng
Copy link
Author

Moonofweisheng commented Jul 4, 2024

可以这么说,因为它的<virtual-host-cmp @test="handleTest"></virtual-host-cmp> 压根就没有,直接是内部的内容

image
uni-app应该是使用这个属性Fragment 来实现toutiao小程序平台的virtualHost的吧,其实它和微信的virtualHost实现并不是一致的,这就造成之前写了virtualHost的组件,更新到指定版本uni-app之后在抖音平台得到了截图中所有的副作用

@YaWeiBoy
Copy link

YaWeiBoy commented Jul 4, 2024

可以这么说,因为它的<virtual-host-cmp @test="handleTest"></virtual-host-cmp> 压根就没有,直接是内部的内容

根据这个说法,去验证了props下发现,传递给组件props,如果页面修改了props导致模拟器直接卡死

@YaWeiBoy
Copy link

YaWeiBoy commented Jul 4, 2024

抖音小程序自身对Fragment 组件节点有特殊限制,是不是意味着如果开启virtualHost,不能使用emit等事件,props传递也会出现问题,这个uniapp编译到抖音平台能处理吗,不然virtualHost没多大的意义

@Moonofweisheng
Copy link
Author

抖音小程序自身对Fragment 组件节点有特殊限制,是不是意味着如果开启virtualHost,不能使用emit等事件,props传递也会出现问题,这个uniapp编译到抖音平台能处理吗,不然virtualHost没多大的意义

意义就是需要在virtualHost上加个条件编译了,不要再抖音平台使用virtualHost🐶

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants