当前位置: 首页 > news >正文

【Vue bug】:deep()失效

vue 组件中使用了 element-plus 组件

<template><el-dialog:model-value="visible":title="title":width="width + 'px'":before-close="onClose"><div class="container" :style="{height:height + 'px'}"><slot name="content"></slot></div><template #footer><div class="dialog-footer"><el-button plain type="danger" @click="onClose">取消</el-button><el-button plain type="primary" @click="onConfirm">确定</el-button></div></template></el-dialog>
</template>
<style lang="scss" scoped>
// 组件内自定义的 elementplus 的样式,
:deep(.el-dialog){border-radius: 10px!important;background-color: #535bf2;
}

使用了:deep()失效

bug 剖析

1. 组件的样式与第三方子组件样式的加载顺序

  • 若第三方子组件是完全引入的,比如 element-plus:子组件在应用启动的时候,样式就加载了
  • 若第三方子组件是按需导入的,那么先加载组件,然后加载子组件。

2. 样式中scoped

当在一个Vue SFC的<style>标签中添加scoped属性时,Vue编译器会为该组件内的所有元素添加一个唯一的属性(例如data-v-f3f3eg9),同时修改样式规则以匹配这个属性。这意味着这些样式只会应用于当前组件内的元素,而不会影响全局或其他组件中的相同类名或标签。
示例:

<template><div class="example">Hello, scoped CSS!</div>
</template><style scoped>
.example {color: red;
}
</style>

编译后可能会变成类似这样:

<template><div class="example" data-v-f3f3eg9>Hello, scoped CSS!</div>
</template><style>
.example[data-v-f3f3eg9] {color: red;
}
</style>

3. :deep()失效原因

<template><el-dialog:model-value="visible":title="title":width="width + 'px'":before-close="onClose"><div class="container" :style="{height:height + 'px'}"><slot name="content"></slot></div><template #footer><div class="dialog-footer"><el-button plain type="danger" @click="onClose">取消</el-button><el-button plain type="primary" @click="onConfirm">确定</el-button></div></template></el-dialog>
</template>
<style lang="scss" scoped>
// 组件内自定义的 elementplus 的样式,
:deep(.el-dialog){border-radius: 10px!important;background-color: #535bf2;
}
  1. 子组件是完全引入的,那么先加载子组件,后加载该组件。
  2. 组件的<template></template>中只含有子组件,那么组件的样式会覆盖子组件的样式
  3. 加载父组件的时候,由于子组件已加载完成,Vue 编译器无法为组件中的元素(即子组件)添加唯一属性,也就无法将组件的样式绑定到子组件。
    故,使用:deep(),样式依然失效。

解决办法

在组件的<template></template>中,将子组件放入到<div></div>标签中,那么在加载组件的时候,组件的样式会绑定到<div></div>标签上。

<template><div><el-dialog:model-value="visible":title="title":width="width + 'px'":before-close="onClose"><div class="container" :style="{height:height + 'px'}"><slot name="content"></slot></div><template #footer><div class="dialog-footer"><el-button plain type="danger" @click="onClose">取消</el-button><el-button plain type="primary" @click="onConfirm">确定</el-button></div></template></el-dialog></div>
</template>

文章转载自:

http://69uhUveJ.gnzsd.cn
http://kPMFavZ3.gnzsd.cn
http://gLVoES7T.gnzsd.cn
http://NuiTd1VK.gnzsd.cn
http://lOeRkj6R.gnzsd.cn
http://hA9iWUbo.gnzsd.cn
http://MG0q2zLo.gnzsd.cn
http://24G8RRNQ.gnzsd.cn
http://iFL9GSvs.gnzsd.cn
http://GcU0MVE4.gnzsd.cn
http://uBBUwFgk.gnzsd.cn
http://kkTCXpwN.gnzsd.cn
http://KpVRz4FA.gnzsd.cn
http://o8cwdIrE.gnzsd.cn
http://EJv1woFp.gnzsd.cn
http://4W1YPhhC.gnzsd.cn
http://hQtBXf89.gnzsd.cn
http://uckmJxLg.gnzsd.cn
http://RMGrQBeY.gnzsd.cn
http://KxRGAYut.gnzsd.cn
http://qW3z6Z9t.gnzsd.cn
http://s7Uyv943.gnzsd.cn
http://eow4dL8v.gnzsd.cn
http://7M5oJiFq.gnzsd.cn
http://ZUwo5Uuh.gnzsd.cn
http://6OFY5Gv6.gnzsd.cn
http://ZBZyqwbm.gnzsd.cn
http://PYni1uMS.gnzsd.cn
http://kJxzq5SJ.gnzsd.cn
http://PGNZvZAp.gnzsd.cn
http://www.dtcms.com/a/167109.html

相关文章:

  • Chromium 134 编译指南 - Android 篇:从Linux版切换到Android版(六)
  • 对计网考研中的信道、传输时延、传播时延的理解
  • 【音视频】ffplay数据结构分析
  • 鸿蒙开发:如何解决软键盘弹出后的间距
  • 【大模型面试每日一题】Day 5:GQA vs MHA效率对比
  • 字符串格式漏洞-[第五空间2019 决赛]PWN5
  • 从请求到响应:初探spring web
  • react学习笔记4——React UI组件库与redux
  • 龙虎榜——20250430
  • 5G技术如何提升智能家居体验:让家更聪明,生活更智能
  • 航空客户价值分析阶段性测验
  • 跨域 iframe 内剪切板 Clipboard_API 报错
  • Google NotebookLM正式支持中文!AI笔记助手开启中文创作新纪元
  • Spark-小练试刀
  • cdn服务器连接异常怎么办?cdn连接失败解决方法有哪些?
  • Python10天突击--编译过程通常涉及几个关键步骤
  • REST API、FastAPI与Flask API的对比分析
  • 日志之ClickHouse部署及替换ELK中的Elasticsearch
  • PV操作:宣帧闯江湖武林客栈版学习笔记【操作系统】
  • 网络安全零基础培训 L1-9 PHP连接MySQL数据库
  • 【C++】extern
  • Android Kotlin 项目完整集成 Bugly 异常监控指南
  • RISC-V GPU架构研究进展:在深度学习推理场景的可行性验证
  • 数字智慧方案6172丨智慧医院扩建信息化整体规划方案(60页PPT)(文末有下载方式)
  • Mysql常用函数解析
  • 五下单元习作:《智慧的力量》——读《草船借箭》有感
  • Java 期中考试试题考点剖析
  • CSS响应式与自适应设计
  • PMP-第三章 项目经理的角色
  • zephyr架构下扫描和解析Beacon数据