Vue插槽的那些事儿

简介: 2.4 插槽1. 插槽内容插槽可以包含任意的模板代码,包括html,甚至其他组件。如下:<slot></slot> 在渲染时将被替换成组件<text-document> 之间的所有内容

Vue插槽的那些事儿



2.4 插槽


1. 插槽内容


插槽可以包含任意的模板代码,包括html,甚至其他组件。

如下:<slot></slot> 在渲染时将被替换成组件<text-document> 之间的所有内容


aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTAzNTgyLzE1OTMzMDg4MDM1NTgtYTRjNDQ3MjgtNGIxMi00YTQ1LWE3YjctOTdmMzhkYmFmYjIzLnBuZw.png


2. 编译作用域


插槽里插入的内容能访问的作用域

例如下面的 doc.title 就是在访问同级作用域里的内容


aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTAzNTgyLzE1OTMzMTA4NzAzMzktYWJmNWYwZjktZWRkNC00ODRiLTkwYjUtMDU4NGZmNGUyMmY2LnBuZw.png


3. 插槽设置默认内容


如果插槽里没有提供内容,可以设置默认渲染的内容:如下


aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTAzNTgyLzE1OTMzMTMxNTUyODEtNjhmOWRiZjItZTA1Yi00M2I4LWE4ZmQtOWZmMzU5MWY0Y2Q3LnBuZw.png


4. 具名插槽


涉及多个插槽时,我们用name的属性来区分各个插槽,没有name属性的默认name属性值为 default,如下:


aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTAzNTgyLzE1OTMzMTQ1MzcxODEtNTUyODhhZjctMzJhYy00MGU3LWJjNjEtNTg5MmIxNzAxNjExLnBuZw.png


5. 作用域插槽


插槽内如何访问别的作用域下的内容?

如下,要在里用user.firstName来替换默认的user.lastName值,如何在里访问到user呢?vue提供了一套方案,如下:


aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTAzNTgyLzE1OTMzMjg2NTk4MzAtMmY2ZWU2NGQtOWUwNS00MDY5LWIwOTItM2E5YTBlMTAxY2ViLnBuZw.png


单个插槽时的缩写语法和解构赋值语法


// 【原来写法】
<current-user>
  <template v-slot:default="slotProps">
      {{ slotProps.user.firstName }}
  </template>
 </current-user>
// 【缩写语法】
 <current-user v-slot="slotProps">
        {{ slotProps.user.firstName }}
 </current-user>
// 【也可用ES5的解构赋值语法】
 <current-user v-slot="{ user }">
        {{ user.firstName }}
 </current-user>


6. Dynamic Slot Names


插槽名可以是动态的


<base-layout>
  <template v-slot:[dynamicSlotName]>
    ...
  </template>
</base-layout>


7. 具名插槽的缩写

用#代替v-slot:


<base-layout>
  <template #header>
    <h1>Here might be a page title</h1>
  </template>
  <p>A paragraph for the main content.</p>
  <p>And another one.</p>
  <template #footer>
    <p>Here's some contact info</p>
  </template>
</base-layout>


更多Vue文档解读:《Vue Doc 笔记》

目录
相关文章
|
5天前
|
JavaScript
vue组件中的插槽
本文介绍了Vue中组件的插槽使用,包括单个插槽和多个具名插槽的定义及在父组件中的使用方法,展示了如何通过插槽将父组件的内容插入到子组件的指定位置。
|
3天前
|
JavaScript
vue消息订阅与发布
vue消息订阅与发布
|
4天前
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
|
4天前
|
JavaScript 前端开发 API
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
|
2天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
11 4
|
2天前
|
JavaScript
vue尚品汇商城项目-day07【51.路由懒加载】
vue尚品汇商城项目-day07【51.路由懒加载】
12 4
|
4天前
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
2天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
8 2
|
4天前
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
4天前
|
JavaScript
vue 函数化组件
vue 函数化组件
下一篇
无影云桌面