lal*_*ibi 8 css vue.js vue-component vuejs3 vue-slot
摘要:我需要<slot>从子组件中设置 a 的内容的样式。我正在使用作用域 css 并且样式不适用:
我有以下两个组件:
<!-- Parent.vue -->
<template>
<h1>{{ msg }} from Parent</h1>
<Child>
<h1>{{ msg }} from Child</h1>
</Child>
</template>
...
<style scoped>
h1 {
color: green;
}
</style>
Run Code Online (Sandbox Code Playgroud)
<!-- Child.vue -->
<template>
<slot></slot>
</template>
...
<style scoped>
h1 {
color: red;
}
</style>
Run Code Online (Sandbox Code Playgroud)
我希望第二个<h1>是红色的,但它是绿色的,因为该组件是用如下内容渲染的:
<h1 data-v-452d6c4c data-v-2dcc19c8-s>Hello from Child</h1>
<style>
h1[data-v-452d6c4c] {
color: green;
}
h1[data-v-2dcc19c8] {
color: red;
}
</style>
Run Code Online (Sandbox Code Playgroud)
data-v-452d6c4c来自Parent,data-v-2dcc19c8-s来自Child
如果标签中的第二个属性<h1>只是data-v-2dcc19c8我想要应用的样式,但由于它具有该-s后缀(插槽?),因此不会应用。
我可能可以通过类或其他东西找到其他解决方案,但我很少使用<slot>,并且我想了解内部工作原理。这-s告诉我,我想做的事情可以在框架的帮助下处理,我错过了什么?
工作样本:
Dan*_*Dan 22
使用Vue 3 中的新:slotted选择器:
儿童.vue
<template>
<slot></slot>
</template>
<script>
export default {
name: "Child",
};
</script>
<style scoped>
:slotted(h1) {
color: red !important;
}
</style>
Run Code Online (Sandbox Code Playgroud)
在 Vue 3 中,scoped默认情况下子样式不会影响开槽内容。
在您的特定示例中,!important修饰符也是必要的,因为父级还定义了一个h1样式,否则该样式将优先