首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
10.1 注册自定义指令
10.1.1 全局自定义指令
10.1.2 局部自定义指令
10.2 钩子函数
10.3 绑定值的类型
10.3.1 绑定数值
10.3.2 绑定字符串
10.3.3 绑定对象字面量
11.1 注册组件
11.1.1 注册全局组件
11.1.2 注册局部组件
11.2 向子组件传递数据
11.2.1 Prop基本用法
11.2.2 数据验证
11.3 监听子组件事件
11.3.1 监听自定义事件
11.3.2 监听原生事件
11.4 插槽的使用
11.4.1 基础用法
11.4.2 编译作用域
11.4.3 默认内容
11.4.4 命名插槽
11.4.5 作用域插槽
11.5 混入
11.5.1 基础用法
11.5.2 选项合并
11.6 动态组件
11.6.1 动态组件的用法
11.6.2 缓存效果
12.1 什么是组合API
12.2 setup()函数
12.3 响应式API
12.3.1 reactive()方法
12.3.2 watchEffect()方法
12.3.3 ref()方法
12.3.4 computed()方法
12.3.5 watch()方法
12.4 生命周期钩子函数
12.5 使用ref获取DOM元素
13.1 单元素过渡
13.1.1 CSS过渡
13.1.2 过渡的类名
13.1.3 自定义过渡的类名
13.1.4 CSS动画
13.1.5 使用JavaScript钩子函数实现动画
13.2 多元素过渡
13.2.1 多元素过渡的用法
13.2.2 设置元素的key属性
13.2.3 过渡模式的设置
13.3 多组件过渡
13.4 列表过渡
14.1 什么是虚拟DOM
14.2 render()函数的使用
14.2.1 基本用法
14.2.2 h()函数
14.3 使用JavaScript代替模板功能
15.1 路由基础
15.1.1 引入Vue Router
15.1.2 基本用法
15.1.3 动态路由匹配
15.1.4 命名路由
15.2 编程式导航
15.3 嵌套路由
15.4 命名视图
15.5 高级用法
15.5.1 beforeEach钩子函数
15.5.2 scrollBehavior方法
当前位置:
首页>>
技术小册>>
Vue.js从入门到精通(三)
小册名称:Vue.js从入门到精通(三)
### 11.4.4 命名插槽 在Vue.js的组件化开发过程中,插槽(Slots)是一种非常重要的功能,它允许我们定义组件的结构,并允许父组件向子组件的模板中插入HTML内容。这种机制极大地增强了组件的复用性和灵活性。Vue.js提供了多种插槽类型,其中命名插槽(Named Slots)是理解和使用最为频繁的一种。本章节将深入探讨命名插槽的概念、用法、以及在实际项目中的应用场景。 #### 11.4.4.1 命名插槽的基本概念 在Vue 2.6.0及更高版本中,命名插槽允许我们为插槽定义名称,从而可以在父组件中通过指定名称来向特定的插槽插入内容。这与默认插槽(未命名的插槽)不同,后者只能插入一个未指定名称的内容区域。命名插槽的引入,使得组件间的内容分发更加精确和灵活。 #### 11.4.4.2 如何在子组件中定义命名插槽 在子组件中,你可以通过`<template>`标签配合`v-slot:插槽名`(在Vue 2.6.0中)或`#插槽名`(在Vue 3.x中,作为`v-slot`的缩写)来定义命名插槽。例如,我们定义一个名为`header`和`footer`的命名插槽: ```vue <!-- ChildComponent.vue --> <template> <div class="container"> <header> <slot name="header"></slot> </header> <main> <!-- 组件的主要内容 --> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> ``` 在上面的例子中,`<slot name="header"></slot>`和`<slot name="footer"></slot>`分别定义了名为`header`和`footer`的命名插槽。 #### 11.4.4.3 如何在父组件中使用命名插槽 在父组件中,你可以通过`<template>`标签结合`v-slot:插槽名`(Vue 2.6.0+)或`#插槽名`(Vue 3.x)来指定向哪个命名插槽插入内容。例如: ```vue <!-- ParentComponent.vue --> <template> <ChildComponent> <template v-slot:header> <h1>这是头部内容</h1> </template> <template v-slot:footer> <p>这是页脚内容</p> </template> </ChildComponent> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent } } </script> ``` 或者,在Vue 3.x中,使用更简洁的语法: ```vue <!-- ParentComponent.vue (Vue 3.x) --> <template> <ChildComponent> <template #header> <h1>这是头部内容</h1> </template> <template #footer> <p>这是页脚内容</p> </template> </ChildComponent> </template> <script setup> import ChildComponent from './ChildComponent.vue'; </script> ``` #### 11.4.4.4 命名插槽的进阶使用 ##### 1. 默认插槽与命名插槽的混合使用 一个组件可以同时拥有默认插槽和多个命名插槽。父组件可以根据需要,向不同的插槽插入不同的内容。 ```vue <!-- ChildComponent.vue --> <template> <div> <header> <slot name="header"></slot> </header> <main> <slot></slot> <!-- 默认插槽 --> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> <!-- ParentComponent.vue --> <template> <ChildComponent> <template v-slot:header> <h1>头部</h1> </template> 默认内容 <template v-slot:footer> <p>页脚</p> </template> </ChildComponent> </template> ``` ##### 2. 使用`v-slot`的简写 在Vue 2.6.0+中,`v-slot`指令有简写形式,即`#`前缀。Vue 3.x进一步推广了这一用法,使其成为标准。 ```vue <!-- Vue 2.6.0+ 和 Vue 3.x --> <template #header> <!-- 内容 --> </template> ``` ##### 3. 插槽的作用域 命名插槽不仅可以传递HTML内容,还可以传递数据(即作用域插槽)。子组件可以通过`<slot>`标签的`v-bind`或简写`:`绑定数据到插槽上,父组件在接收这些插槽时,可以访问这些数据。这允许父组件根据子组件提供的数据来定制插槽内容。 ```vue <!-- ChildComponent.vue --> <template> <ul> <slot name="item" v-for="item in items" :item="item"> <!-- 默认内容,可选 --> </slot> </ul> </template> <script> export default { data() { return { items: [1, 2, 3] } } } </script> <!-- ParentComponent.vue --> <template> <ChildComponent> <template v-slot:item="{ item }"> <li>{{ item }}</li> </template> </ChildComponent> </template> ``` #### 11.4.4.5 命名插槽的应用场景 命名插槽在Vue.js项目中有着广泛的应用场景,包括但不限于: - **布局组件**:如页眉、页脚、侧边栏等,可以通过命名插槽来定义不同的布局部分。 - **卡片组件**:卡片组件通常包含标题、内容、操作按钮等部分,这些部分可以通过命名插槽来定制。 - **列表组件**:列表的每一项可能需要不同的展示方式,命名插槽允许父组件为每一项提供自定义的模板。 - **表单组件**:表单的不同部分(如输入字段、按钮等)可以通过命名插槽来灵活组织。 #### 11.4.4.6 总结 命名插槽是Vue.js中一种强大的内容分发API,它允许父组件向子组件的特定位置插入内容,极大地增强了组件的复用性和灵活性。通过理解命名插槽的基本概念、用法以及进阶特性,你可以更加高效地构建出结构清晰、易于维护的Vue.js应用。在实际项目中,合理利用命名插槽,可以使你的组件设计更加合理,代码更加简洁。
上一篇:
11.4.3 默认内容
下一篇:
11.4.5 作用域插槽
该分类下的相关小册推荐:
Vue.js从入门到精通(二)
Vue3技术解密
Vue原理与源码解析
TypeScript和Vue从入门到精通(一)
Vue.js从入门到精通(四)
Vue面试指南
TypeScript和Vue从入门到精通(四)
移动端开发指南
vuejs组件实例与底层原理精讲
TypeScript和Vue从入门到精通(五)
Vue源码完全解析
TypeScript和Vue从入门到精通(三)