【Vue 学习】插槽的使用

插槽的使用

1. 默认插槽

子组件

<template>
  <div>
    <slot></slot>
    <slot>父组件使用了子组件,但是没有传递结构,我这个默认内容就出现了</slot>
  </div>
</template>


<script>
export default {
  name: 'HelloWorld',
}
</script>

父组件

  • 使用的子组件里面插入的结构,均是在 APP 组件里面进行解析之后,再插入子组件的插槽的位置
  • 可以把样式写到 APP 中
  • 也可以写到 子组件中
<template>
  <div>
    <HelloWorld>
      <h1 class="box1">Hello,001!</h1>
    </HelloWorld>
    <hr>
    <HelloWorld/>
    <hr>
    <HelloWorld>
      <h1 class="box2">Hello,003!</h1>
    </HelloWorld>
  </div>
</template>


<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>


<style>
.box1 {
  color: red;
}
.box2 {
  color: blue;
}
</style>

2. 具名插槽

(1)默认写法

有名字的插槽,适用于有多个插槽

写完名称之后可以追加

子组件

<template>
  <div>
    <slot name="box1"></slot>
    <slot name="box2">父组件使用了子组件,但是没有传递结构,我这个默认内容就出现了</slot>
  </div>
</template>


<script>
export default {
  name: 'HelloWorld',
}
</script>

父组件

<template>
  <HelloWorld>
    <h1 slot="box1" class="box1">Hello,001!</h1>
    <ul slot="box2" class="box2">
      <li>001</li>
      <li>002</li>
      <li>003</li>
    </ul>
  </HelloWorld>
</template>


<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>


<style>
.box1 {
  color: red;
}
.box2 {
  color: blue;
}
</style>

(2)结合 template 标签使用具名插槽

可以同时包裹多个结构,且不用再增加一个多余的 div 包裹结构

使用 template 标签,不会成为 DOM

子组件

<template>
  <div>
    <slot name="box">父组件使用了子组件,但是没有传递结构,我这个默认内容就出现了</slot>
  </div>
</template>


<script>
export default {
  name: 'HelloWorld',
}
</script>

父组件

<template>
  <HelloWorld>
    <template slot="box">
      <h1>Hello,001!</h1>
      <ul>
        <li>001</li>
        <li>002</li>
        <li>003</li>
      </ul>
    </template>
  </HelloWorld>
</template>


<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>

3. 作用域插槽

适用于数据在子组件,父组件使用子组件,父组件将结构填充到子组件

子组件

<template>
  <div>
    <slot name="box" :users="users" :title="'我是子组件传递给父组件的 title 属性'">
      父组件使用了子组件,但是没有传递结构,我这个默认内容就出现了
    </slot>
  </div>
</template>


<script>
export default {
  name: 'HelloWorld',
  data() {
    return {
      users: [
        {'id': '001', 'name': 'tom'},
        {'id': '002', 'name': 'mary'},
        {'id': '003', 'name': 'jack'},
      ]
    }
  }
}
</script>

父组件

<template>
  <div>
    <HelloWorld>
      <!-- 父组件接收子组件传递的数据,全部封装到 data 对象里面 -->
      <template slot="box" scope="data">
        <h6>{{data.title}}</h6>
        <ul>
          <li v-for="user in data.users" :key="user.id">{{ user.name }}</li>
        </ul>
      </template>
    </HelloWorld>
    <hr>
    <HelloWorld>
      <template slot="box" scope="data">
        <h1>{{data.title}}</h1>
        <ol>
          <li v-for="user in data.users" :key="user.id">{{ user.name }}</li>
        </ol>
      </template>
    </HelloWorld>
  </div>
</template>


<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的不谷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值