首页
技术小册
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 插槽的使用 在Vue.js的开发旅程中,插槽(Slots)是一项至关重要的功能,它极大地增强了组件的灵活性和复用性。通过插槽,我们可以定义组件内部的一些占位符,然后在父组件中填充这些内容,从而实现内容与结构的分离,使得组件更加通用和易于维护。本章将深入讲解Vue.js中插槽的使用,包括默认插槽、具名插槽、作用域插槽以及插槽的进阶用法。 #### 11.4.1 理解插槽的基本概念 在Vue.js中,插槽允许我们在组件模板中预留一些位置,以便在父组件中使用该组件时,可以指定填充这些位置的内容。插槽的内容实际上是由父组件提供的,但它会在子组件的模板中渲染出来。这种机制类似于HTML中的`<slot>`元素(虽然Vue 2.x及以前版本并未直接使用HTML的`<slot>`标签,但从Vue 3开始,官方推荐使用`<slot>`作为插槽的声明方式),但Vue的插槽提供了更丰富的功能和灵活性。 #### 11.4.2 默认插槽 默认插槽是最基本也是最常见的插槽类型。它不需要任何名称,只需要在子组件的模板中预留一个`<slot>`位置即可。然后,在父组件中使用该子组件时,可以直接在子组件标签内部编写要插入的内容,这些内容将会自动填充到子组件模板中的`<slot>`位置。 **示例代码**: ```vue <!-- 子组件 MyButton.vue --> <template> <button> <slot>默认按钮文本</slot> </button> </template> <!-- 父组件 App.vue --> <template> <div> <MyButton>点击我</MyButton> </div> </template> <script> import MyButton from './MyButton.vue'; export default { components: { MyButton } } </script> ``` 在上述示例中,`<MyButton>`组件内部定义了一个默认插槽,父组件通过直接在其标签内写入“点击我”来填充这个插槽。如果父组件没有提供任何内容,则默认显示“默认按钮文本”。 #### 11.4.3 具名插槽 当子组件需要多个插槽时,可以使用具名插槽来区分它们。具名插槽通过在`<slot>`标签上添加一个`name`属性来定义,并在父组件中通过`<template v-slot:插槽名>`或简写为`#插槽名`来指定哪些内容应该被插入到哪个插槽中。 **示例代码**: ```vue <!-- 子组件 Layout.vue --> <template> <div class="container"> <header> <slot name="header"></slot> </header> <main> <slot></slot> <!-- 默认插槽 --> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> <!-- 父组件 App.vue --> <template> <Layout> <template v-slot:header> <h1>页面标题</h1> </template> <p>这里是主内容。</p> <template v-slot:footer> <p>版权信息</p> </template> </Layout> </template> <script> import Layout from './Layout.vue'; export default { components: { Layout } } </script> ``` 在这个例子中,`Layout`组件定义了三个插槽:一个名为`header`的插槽,一个默认插槽,以及一个名为`footer`的插槽。父组件通过具名插槽将内容正确地插入到`Layout`组件的相应位置。 #### 11.4.4 作用域插槽 作用域插槽允许子组件将数据“暴露”给插槽内容,即插槽内容不仅可以访问父组件的数据,还可以访问子组件的数据。这通过子组件在`<slot>`标签上绑定`v-bind`(或简写为`:`)来传递数据给插槽,然后在父组件的插槽模板中通过`slot-scope`(Vue 2.x)或`v-slot`(Vue 2.6+及Vue 3)来接收这些数据。 **Vue 2.x 示例(使用`slot-scope`)**: ```vue <!-- 子组件 List.vue --> <template> <ul> <li v-for="item in items" :key="item.id"> <slot name="item" :item="item"> {{ item.text }} <!-- 默认内容 --> </slot> </li> </ul> </template> <!-- 父组件 App.vue --> <template> <List> <template slot="item" slot-scope="slotProps"> <strong>{{ slotProps.item.text }}</strong> </template> </List> </template> ``` **Vue 2.6+及Vue 3 示例(使用`v-slot`)**: ```vue <!-- 子组件 List.vue (不变) --> <!-- 父组件 App.vue --> <template> <List> <template v-slot:item="{ item }"> <strong>{{ item.text }}</strong> </template> </List> </template> ``` 在Vue 2.6+及Vue 3中,推荐使用`v-slot`指令来代替`slot-scope`,这使得作用域插槽的语法更加清晰和统一。 #### 11.4.5 插槽的进阶用法 - **动态插槽名**:在Vue中,可以通过表达式来动态指定插槽名,这在进行更复杂的布局时非常有用。 - **插槽的默认内容**:子组件可以为插槽提供默认内容,这在父组件没有提供具体插槽内容时,可以作为备选方案。 - **结合过渡效果**:虽然插槽本身不直接支持过渡效果,但你可以将插槽内容包裹在`<transition>`或`<transition-group>`组件中,以实现平滑的过渡效果。 - **在插槽中使用插槽**:这是一种比较高级的用法,可以在一个插槽的内容中再次使用插槽,创建出高度灵活和可定制的组件结构。 通过深入理解和灵活应用Vue.js中的插槽功能,你可以构建出更加模块化和可复用的组件体系,从而提高开发效率和项目的可维护性。插槽是Vue.js框架中一个强大而灵活的特性,它让组件间的通信和协作变得更加简单和直观。
上一篇:
11.3.2 监听原生事件
下一篇:
11.4.1 基础用法
该分类下的相关小册推荐:
Vue.js从入门到精通(四)
vue项目构建基础入门与实战
TypeScript和Vue从入门到精通(二)
TypeScript和Vue从入门到精通(五)
TypeScript和Vue从入门到精通(四)
Vue3技术解密
TypeScript和Vue从入门到精通(一)
VUE组件基础与实战
移动端开发指南
Vue.js从入门到精通(二)
Vue原理与源码解析
Vue.js从入门到精通(一)