具名插槽
- 具名插槽一般带有name 很多使用场景中都需要向多个插槽传入内容 所以需要借助name属性区分对应哪一个插槽
- 在Vue3.0 中
<testHeader> 哈哈哈哈 </testHeader>
<template>
<div>
<slot></slot>
</div>
</template>
<testHeader>
<template v-slot:header>
将要插入的父组件中定义的内容
</template>
// 也可以写成下面这种
//<template #header>
// 将要插入的父组件中定义的内容
//</template>
</testHeader>
<template>
<div>
<h3>我是header组建</h3>
<slot name="header"></slot>
</div>
</template>
具名插槽 Vue 2.0 版本中的应用
- Vue 3.0 中的写法相较与 Vue2.0 在使用方法上没有做明显更新
<slot></slot> // 接收父组件传递的默认值
<slot name='header'></slot>
<testView>
哈哈哈 大傻子说二傻子是个傻子
<span>我是一个span 标签</span>
// 使用模板
<template>
呵呵哒 对面的是二傻子吧
<p>我是一个P标签</p>
</template>
// 模板添加名称
<template v-slot:header>
</template>
//模板名称简写
<template #header>
</template>
</testView>
作用域插槽在 Vue3.0
- Vue3.0 中具名插槽的基本使用方法与Vue 2.0 无明显差异 只是本身的语法结构差异
const data = reactive({
list:['喜洋洋','美洋洋','沸洋洋',‘懒洋洋’],
user:{name:"妮可 * 罗宾",sex:"girl"},
label:"我是一个标签的值"
})
return {
...toRefs(data)
}
<slot :list="list" :user="user" :label='label'></slot>
<testView v-slot=‘slotProps’>
<span>{{ slotProps.label }}<span/>
<br>
<p v-for='(item,index) in slotProps' :key= index>{{ item }}</p>
<span>{{ slotProps.label }}</span>
</testView>
作用域插槽 Vue2.0
- 父组件需要访问子组件中的作用域中的值时候 一般用到作用域插槽 上代码
- 我的理解是 子组件中的数据模板展示样式 父组件决定 子组件把数据回传给父组件 父组件分配
data() {
return{
user:{
firstName:"蒙奇 D",
lastName:"路飞",
abs:"蒙奇 D 路飞"
},
list:['A','B','C','D','E','F'],
obj:{
abs:"蒙奇D 路飞",
opr:'哈哈哈哈~'
},
label:'我是一个label........',
}
},
<slot :user="user" :list="list" :obj="obj" :label="label"></slot>
<testView>
<template v-slot="slotProps">
<br>
<span>父组件拿到的子组件的name{{slotProps.user.abs}}</span>
<div v-for="item in slotProps.list" :key="item">
<span class="test">{{item}}</span>
</div>
<span>{{slotProps.obj.abs}}</span>
<span>{{slotProps.label}}</span>
</template>
</testView>