vue学习笔记-组件篇(插槽)
2020-01-13 07:32
363 查看
匿名插槽
- 当组件中有插槽内容是显示插槽内容
- 当组间中没有插槽内容是,会默认显示slot中的插槽内容
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="app"> <!-- 组件名称--> <!-- 这里的所有组件标签中嵌套的内容会替换掉slot 如果不传值 则使用 slot 中的默认值 --> <my-component>插槽内容</my-component> </div> </body> <!-- 引入vue.js --> <script src="./vue.js"></script> <script> //全局注册组件 //第一个参数自定义标签名 Vue.component('my-component', { template: ` <div> <slot><span>默认插槽内容</span></slot> </div> ` }) //创建事件中心 var hub = new Vue() //创建vue实例 var vm = new Vue({ el: '#app', data: { }, methods: { } }) </script> </html>
页面显示结果如下:
当组建中没有插槽内容是会默认显示slot中的内容
具名插槽
- 有名字的插槽
- slot中带有name的插槽
代码如下(这里使用了
2.6.0+新增的
v-slot指令)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="app"> <!-- 组件名称--> <my-component> <template #header> <h1>页面头部</h1> </template> <template> <h1>页面内容</h1> </template> <template #footer> <h1>页面底部</h1> </template> </my-component> </div> </body> <!-- 引入vue.js --> <script src="./vue.js"></script> <script> //全局注册组件 //第一个参数自定义标签名 Vue.component('my-component', { template: ` <div> <div class="container"> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div> </div> ` }) //创建事件中心 var hub = new Vue() //创建vue实例 var vm = new Vue({ el: '#app', data: { }, methods: { } }) </script> </html>
页面显示结果如下:
作用域插槽
- 父组件对子组件加工处理
- 既可以复用子组件的slot,又可以使slot内容不一致
代码如下(这里使用了
2.6.0+新增的
v-slot指令):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="app"> <!-- 组件名称--> <my-component> <!--独占默认插槽 --> <!-- <template v-slot:default="slotProps"> 姓名: {{slotProps.user.firstName+slotProps.user.firstName.lastName}} </template> --> <!--不带参数的 v-slot 被假定对应默认插槽: --> <!--独占默认插槽缩写形式+对象解构更简单 --> <template v-slot="{user}"> 姓名: {{user.firstName+''+user.lastName}} </template> </my-component> </div> </body> <!-- 引入vue.js --> <script src="./vue.js"></script> <script> //全局注册组件 //第一个参数自定义标签名 Vue.component('my-component', { data: function () { return { user: { lastName: '肖战', firstName: '李' } } }, template: ` <div> <span> <slot :user="user">{{ user }}</slot> </span> </div> ` }) //创建vue实例 var vm = new Vue({ el: '#app', methods: { } }) </script> </html>
页面显示结果如下
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- vue学习笔记之——v-for与局部组件的传值
- Vue 2.0学习笔记:实现组件数据的双向绑定
- vue自定义组件和列表循环--vue学习笔记
- Vue学习笔记——实例和内置组件【转自jspang】
- vue学习笔记--父子组件通信
- vue学习笔记:6.4.组件案例-评论列表
- Vue学习笔记进阶篇之函数化组件解析
- vue学习笔记 - 组件通信01
- Vue学习笔记 3 - 组件化 / slot(插槽)
- Vue学习笔记:Vue组件的核心概念(下)
- Vue学习笔记4.5 非父子组件之间的数据传递(bus机制/订阅者模式/观察者模式)
- 【音乐App】—— Vue-music 项目学习笔记:播放器内置组件开发(一)
- Vue.js学习笔记-1-组件
- vue 学习笔记 part-6 - > 组件
- Vue4.3学习笔记 组件参数校验与非props特性
- Vue 2.0学习笔记:组件的使用
- Vue 2.0学习笔记:Vue组件内容分发(slot)
- vuex--学习笔记(二)在组件中如何获取vuex的state对象中的属性
- Vue学习笔记3.1 子-父组件传递数据 v-bind、v-on、$emit()
- 【Vue】零基础学习Vue: 第25课 Vue子组件slot插槽让子组件自定义样式: