上一章给大家讲解了组件的注册以及父子组件之间数据的传递,本文继续给大家讲解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