8***@qq.com
8***@qq.com
  • 发布:2024-02-03 18:19
  • 更新:2024-02-03 18:38
  • 阅读:54

【报Bug】子组件的具名插槽如果延迟渲染的话,样式会丢失

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOS Ventura版本13.6.3

浏览器平台: Chrome

浏览器版本: 版本 121.0.6167.85(正式版本) (arm64)

项目创建方式: CLI

CLI版本号: 2.0.2-3090920231225001

示例代码:
// 子组件  
<template>  
  <view class="card">  
    <view>我是子组件</view>  
    <view class="title" v-if="$slots.title">  
        <slot name="title"></slot>  
    </view>  
    <slot/>  
    <view class="footer" v-if="$slots.footer">  
        <slot name="footer"></slot>  
    </view>  
  </view>  
</template>  

<script>  
export default {  

}  
</script>  

<style lang="scss" scoped>  
.card {  
    border: 2upx solid #000;  
    margin-bottom: 20upx;  
    .title {  
        color: red;  
    }  
    .footer {  
        color: blue;  
    }  
}  
</style>
// 父组件  
<template>  
  <view>  

    <childComponent>  
        <template v-if="step === 1">  
            <view>我是步骤1的内容</view>  
        </template>  
        <template v-if="step === 2">  
            <view slot="title">我是步骤2的标题,我是红色的</view>  
            <view>我是步骤2的内容</view>  
            <view slot="footer">我是步骤2的FOOTER</view>  
        </template>  
    </childComponent>  
  </view>  
</template>  

<script>  
import childComponent from './_components/childComponent.vue'  
export default {  
    components: {  
        childComponent  
    },  
    data() {  
        return {  
            step: 1  
        }  
    },  
    mounted() {  
        setTimeout(() => {  
            this.step = 2;  
        }, 3000);  
    }  
}  
</script>  

<style>  

</style>

操作步骤:

代码复制粘贴至项目中,页面自动运行

预期结果:

title是红色字体,内容是黑色字体,Footer是蓝色字体

实际结果:

title是黑色字体,内容是黑色字体,Footer是蓝色字体

bug描述:

子组件的具名插槽title如果延迟渲染的话,title的样式会丢失,但是footer没问题

2024-02-03 18:19 负责人:无 分享
已邀请:
喜欢技术的前端

喜欢技术的前端 - QQ---445849201

子组件去掉 v-if 判断

<template>  
    <view class="card">  
        <view>我是子组件</view>  
        <view class="title">  
            <slot name="title"></slot>  
        </view>  
        <slot />  
        <view class="footer">  
            <slot name="footer"></slot>  
        </view>  
    </view>  
</template>
  • 8***@qq.com (作者)

    实际业务场景中,会出现如果需要判断是否存在插槽的情况,想到了另外一个方法是用v-show

    2024-02-04 10:06

要回复问题请先登录注册