You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js v2.6.11动态组件过渡效果无法实现求助

问题排查与解决方案

你的动态组件过渡失效的核心原因是scoped样式的作用域限制:

当<style>标签添加scoped属性后,Vue会为当前组件内的所有元素自动添加一个唯一的data-v-xxx属性,同时样式选择器也会被改写为包含该属性的形式(比如.component-fade-enter-active会变成.component-fade-enter-active[data-v-xxx])。但动态组件作为独立的子组件,它的根元素不会继承这个data-v-xxx属性,导致过渡相关的样式无法匹配到动态组件的根元素,因此过渡效果不生效。

而你代码中第二个过渡(div和p的切换)能正常工作,是因为这两个元素是当前组件的直接子元素,会被加上data-v-xxx属性,样式可以正常匹配。


解决方案1:移除scoped属性

如果过渡样式不需要局限在当前组件内,可以直接去掉scoped:

<style>
.component-fade-enter-active,
.component-fade-leave-active {
  transition: all 6s ease;
}

.component-fade-enter,
.component-fade-leave-to {
  opacity: 0;
}
</style>

解决方案2:使用深度选择器(保留scoped)

如果需要保留scoped样式的作用域,可以使用Vue 2的深度选择器/deep/(或::v-deep),让样式穿透到子组件:

<style scoped>
/deep/ .component-fade-enter-active,
/deep/ .component-fade-leave-active {
  transition: all 6s ease;
}

/deep/ .component-fade-enter,
/deep/ .component-fade-leave-to {
  opacity: 0;
}
</style>

修改后,点击Toggle按钮时,动态组件的透明度过渡效果就能正常触发了。

内容的提问来源于stack exchange,提问作者wahab memon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:12:50