难得最近不是很忙,把项目里用到的插槽总结哈!
插槽
更新:2.6.0 中,具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)
废弃:slot 和 slot-scope特性
插槽目的
个人理解:子组件提供插槽,父组件任意提供插槽内容
插槽内容
官方:Vue 实现了一套内容分发的 API,将
自己:子组件通过
父组件通过的v-slot向插槽提供内容
***父组件不提供插槽内容时,则使用插槽的后备内容【默认值】
编译作用域
规则:父级模板里的所有内容都是在父级作用域中编译的;
子模板里的所有内容都是在子作用域中编译的。
后备内容
插槽的后备内容:指默认值
具名插槽
(1)总结:
1.父组件 元素v-slot指令分发插槽内容,子组件
2.
3.
4.任何没有被包裹在带有 v-slot的 元素中的内容都会被视为默认插槽的内容;
5.默认插槽也可用 元素包裹默认插槽内容;
6.若没有默认插槽,找不到匹配的内容将会被抛弃
//父组件中: 我的博客 //对应: //子组件中"header">默认头部
默认slot分发插槽内容
default>博客内容
(2)详细例子
//子组件s_slot.vue//不带name特性的插槽是默认插槽,默认插槽的name="default" Slot
默认头部
//父组件Slot.vue 我的博客 default>博客内容
或者
- 首页
- 我的
效果如果:
作用域插槽
理解:1.父组件分发插槽内容时,可访问子组件中的数据
2.父组件分发插槽内容时,父组件可向子组件传递数据(参数)
如何实现:
第一种:实现父组件分发插槽内容时,可访问子组件中的数据
1.将子组件的数据A作为一个特性(属性)绑定到
2.在父级作用域中,v-slot带一个值B定义插槽prop的名字
3.详细例子 (为比较,父组件使用情况分2种,默认和访问数据)
//子组件中
//父组件中使用子组件,默认时
结果:
//父组件中使用子组件,访问子组件数据时 我喜欢{{star.user.name}}
结果:
第二种:父组件分发插槽内容时,父组件可向子组件传递数据(参数)
就是普通的父子组件传参
1.父组件将数据A绑定
2.子组件通过props接收
3.详细例子 (为比较,父组件使用情况分2种,默认和传值)
//子组件中作用域插槽
{{header}} {{footer}}
//父组件中:不传值时
结果:
//父组件中:传值:header="header" :footer="footer">
结果:
具名插槽的缩写
1.v-slot 缩写:把参数之前的所有内容 v-slot: 替换为字符 #
如:v-slot:header 缩写为 #header
2.缩写只在其有参数的时候才可用。若为变量时,使用缩写的话,必须明确插槽名