Vue组件入门(十三)作用域插槽

简介: Vue组件入门(十三)作用域插槽

前言


之前我们说过,当在父组件中,向子组件中传入模板片段的时候,也就是在插槽编写代码时。我们在插槽内是只能访问父组件作用域内的数据,而无法访问子组件内部的数据。 而在某些特殊的业务场景下,我们想同时可以访问父组件和子组件内部的数据。而要实现这种效果,我们要怎么做呢?这就要用到我们今天所说的作用域插槽了。下面就让我们来一探究竟。


作用域插槽


上面我们已经说了,插槽内的代码可以访问父组件内部的数据。所以我们要做的就是,在子组件中,把我们想要使用的数据传递到插槽中。而我们就可以像在组件上传递props那样,在 slot 标签上进行传递:


<!-- <Title> 组件的模板内部代码 -->
<div>
  <slot title="我是标题" :count="1"></slot>
</div>
复制代码


而我们想要接受这个插槽的内容时,我们需要在使用的子组件的标签上通过v-slot指令,来接受子组件中在slot标签上使用类似 props的形式传递来的数据:


<Title v-slot="slotProps">
  {{ slotProps.title }}
</Title>
复制代码


当然,你也可以使用解构的形式:


<Title v-slot="{ title }">
  {{ title }}
</Title>
复制代码


具名作用域插槽


而使用具名作用域插槽呢,想要接受子组件传递的过来的数据,就要通过v-slot:header="slotProps"这种形式,也可以使用简写形式#header="slotProps"


<Title>
 <template #header="{ title }"> 
     {{ title }}
 </template>
</Title>
复制代码


注意: 向具名插槽传入数据时,注意 name 是vue的保留字,并不会进行传递:


<slot name="header" title="我是标题"></slot>
复制代码


所以像上面这种情况,你得到的数据将是这样 { title: '我是标题' }


还有如果具名插槽和默认插槽混用的话,需要通过显示的 template 标签来接受默认插槽的数据。不然直接在组件标签上使用v-slot指令会编译错误。


<template>
  <Title>
    <!-- 使用显式的默认插槽 -->
    <template #default="{ title }">
      <p>{{ title }}</p>
    </template>
    <template #content>
      <p>我是文章的内容</p>
    </template>
  </Title>
</template>


相关文章
|
1天前
|
存储 JavaScript
Vue当前时间与接口返回时间的判断
Vue当前时间与接口返回时间的判断
7 0
|
1天前
|
JavaScript
vue生成动态表单
vue生成动态表单
6 0
|
1天前
|
JavaScript 前端开发
Vue生成Canvas二维码
Vue生成Canvas二维码
6 0
|
2天前
|
JavaScript
vue项目切换页面白屏的解决方案
vue项目切换页面白屏的解决方案
5 0
|
2天前
|
JavaScript 前端开发 开发者
new Vue() 发生了什么
new Vue() 发生了什么
8 1
|
2天前
|
JavaScript 容器
使用Vue写一个日期选择器
使用Vue写一个日期选择器
9 1
|
2天前
|
JavaScript
Vue 中如何模块化使用 Vuex
Vue 中如何模块化使用 Vuex
5 0
|
2天前
|
JavaScript 应用服务中间件 nginx
vue中404解决方法
vue中404解决方法
3 0
|
2天前
|
JavaScript 前端开发
vue中nextTick使用以及原理
vue中nextTick使用以及原理
5 0
|
2天前
|
JavaScript
vue实现多个el-form表单提交统一校验的2个方法
vue实现多个el-form表单提交统一校验的2个方法
5 0