上一章给大家讲解了组件的注册以及父子组件之间数据的传递,本文继续给大家讲解Vue3组件剩下的东西
透传属性和事件父组件在使用子组件的时候,如何“透传属性和事件”给子组件呢?
props和emits声明// 父组件
// 子组件

< script setup>中,你需要一个额外的< script>块来书写inheritAttrs: false选项声明来禁止// 父组件
// 子组件
自动“透传属性和事件”的行为,由于Vue不确定要将“透传属性和事件”透传到哪里,所以我们需要v-bind="$attrs"来显式绑定,否则将会抛出一个运行时警告// 父组件
// 子组件
< script setup>中引入useAttrs()来访问一个组件的“透传属性和事件”// 父组件
// 子组件
{{ attrs }}
- {{ attrs.title }}
- {{ attrs.class }}
- {{ attrs.style }}
注意:
● 虽然这里的attrs对象总是反映为最新的“透传属性和事件”,但它并不是响应式的 (考虑到性能因素),你不能通过侦听器去监听它的变化
● 如果你需要响应性,可以使用prop或者你也可以使用onUpdated()使得在每次更新时结合最新的attrs执行副作用
模板片段,让子组件在它们的组件中渲染这些片段,为此 vue 提供了组件的插槽元素 把不确定的、希望由用户指定的部分定义为插槽;插槽可以理解为给预留的内容提供占位符默认内容,如果组件的使用者没有为插槽提供任何内容,则插槽内的默认内容会生效注意:如果在封装组件时没有预留任何插槽,用户提供传递一些模板片段将会被遗弃

// 父组件
// 子组件
卡片功能区域
< slot>插槽指定具体的name名称,这种带有具体名称的插槽叫做“具名插槽”没有指定name名称的插槽,会有隐含的名称叫做 default< template>元素上使用 v-slot:slotName或者#slotName向指定的具名插槽提供内容// 父组件
博客百万博主分享经验
// 子组件
卡片功能区域
属性值的方式来传递子组件的数据,这种带有数据的插槽称之为作用域插槽< template>元素上使用v-slot:slotName="slotProps"或#slotName="slotProps"的方式来访问插槽传递属性值< template>元素,而是直接在使用子组件中直接给默认插槽提供内容,我们可以在使用该子组件时用v-slot="slotProps"来接收该插槽传递的数据对象注意:
< slot >插槽上的name是一个Vue特别保留的属性,不会在作用域插槽中访问到
// 父组件
博客百万博主分享经验- {{ dataProps }}
- 博客的标题:{{ dataProps.cardBlog.title }}
- 博客的时间:{{ dataProps.cardBlog.time }}
- 博主:{{ dataProps.cardAuthor }}
// 子组件
卡片功能区域
.vue组件中的样式会全局生效,很容易造成多个组件之间的样式冲突问题DOM结构,都是基于唯一的index.html页面进行呈现的index.html页面中的DOM元素< style>标签带有scoped属性的后: CSS只会影响当前组件的元素,父组件的样式将不会渗透到子组件中< style scoped>内的选择器,在编译后会自动添加特定的属性选择器根节点会同时被父组件的作用域样式和子组件的作用域样式影响,主要是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式// 转换前
hi
// 转换后
hi
// 父组件
【父】标题
// 子组件
【子】标题
scoped样式中的选择器如果想要做更“深度”的选择,即影响到子组件,可以使用:deep()这个伪类// 编译前
// 编译后
// 父组件
【父】标题
// 子组件
【子】标题
< style >标签支持使用v-bindCSS函数将CSS的值链接到动态的组件状态< script setup>,且支持JavaScript表达式(需要用引号包裹起来)哈希化的CSS自定义属性,因此CSS本身仍然是静态的内联样式的方式应用到组件的某个元素上,并且在源值变更的时候响应式地更新
背景色:文本色:


app.provide()为后代提供数据import { createApp } from 'vue'
const app = createApp({ })
app.provide('message', 'hello!') // message 注入名, 'hello' 值
inject()函数的返回值来注入祖先组件提供的数据 ref,注入进来的会是该ref对象,和提供方保持响应式连接祖先组件中提供,则会抛出警告,可在provide()函数的第二个参数设置默认值来解决JS和视图模板中直接访问
以上就是vue3.0 组件的全部内容和基本用法,文章的代码为一个一个的案例感兴趣可以敲一敲看一看。希望本篇文章能够帮助到你,不懂得可以评论区或者私信问我,我也会一 一解答。谢谢观看!
我的其他文章:https://blog.csdn.net/m0_60970928?type=blog