vue:匿名slot、具名slot、作用域slot(技术栈Vue3 + TS)

简介: vue:匿名slot、具名slot、作用域slot(技术栈Vue3 + TS)

一、背景:

1.1、对于开发可扩展组件非常有用,特别是大型项目;

1.2、匿名slot 适用于只插入一个的时候;

1.3、具名slot 可清晰的插入多个slot,按name匹配使用;

1.4、在slot的内部可以将值通过有名slot传递出去,让外层组件接收,常用于表格展示;

通俗理解:

“占坑”,在组件模板中预定位置(一个或多个),使用该组件时,组件标签里面的内容就会自动填坑(替换组件模板中<slot>位置),当插槽<slot name= ” mySlot ” >有命名时,组件标签中使用属性slot= ”mySlot ” 的元素就会替换该对应位置内容;

二、匿名插槽

子组件:

<slot></slot>

父组件:

<slot  style="color:blue;">我是匿名插槽</slot>

注意:在slot标签添加样式无效。拥有命名的插槽不能被不含slot属性的标签内容替换,会显示slot的默认值(具名slot具有对应性);

三、具名插槽

子组件:

<slot name="slotTest2"></slot>

父组件:

<div name="slotTest2">

       <span style="color:red;">我是具名插槽</span>

     </div>

三、作用域插槽

理解:

作用域插槽在子组件中把“当前数据”传递给父组件,父组件接收,对接收到的数据进行符合业务逻辑、代码逻辑的处理,展示出想要的数据。

子组件:

<!-- 作用域插槽 -->

   <div v-for="(item, index) in list" :key="index">

     <slot name="slotTest3" :item="item"></slot>

   </div>

父组件:

<!-- 作用域插槽 -->

     <template #slotTest3="scope">

       <div>{{scope}}</div>

       <div>{{scope.item.name}}</div>

     </template>

效果:

四、完整代码

子组件代码

<template>
  <div class="hello">
    <!-- 匿名插槽 -->
    <slot></slot>
    <!-- 具名插槽 -->
    <slot name="slotTest2"></slot>
    <!-- 作用域插槽 -->
    <div v-for="(item, index) in list" :key="index">
      <slot name="slotTest3" :item="item"></slot>
    </div>
  </div>
</template>
<script lang="ts">
import { Options, Vue, } from 'vue-class-component';
@Options({
  props: {
    msg: String,
    list: Array
  },
})
export default class HelloWorld extends Vue {
  msg!: string
  list!: any
}
</script>
<style scoped lang="scss">
</style>

父组件代码:

<template>
  <div class="home">
    <slotTest1 :msg="title" :list="list">
      <slot  style="color:blue;">我是匿名插槽</slot>
      <!-- 匿名插槽,注意:在slot标签添加样式无效。拥有命名的插槽不能被不含slot属性的标签内容替换,会显示slot的默认值(具名slot具有对应性); -->
      <div name="slotTest2">
        <span style="color:red;">我是具名插槽</span>
      </div>
      <div> </div>
      <!-- 作用域插槽 -->
      <template #slotTest3="scope">
        <div>{{scope}}</div>
        <div>{{scope.item.name}}</div>
      </template>
    </slotTest1>
  </div>
</template>
<script lang="ts">
import { Options, Vue } from 'vue-class-component';
import slotTest1 from './components/slot-child1.vue';
@Options({
  components: {
    slotTest1,
  },
})
export default class Home extends Vue {
  public title = '插槽'
  public list = [
    {
      name: 'snow', age: '18'
    },
    {
      name: 'snow2', age: '20'
    },
    {
      name: 'snow3', age: '22'
    },
  ]
}
</script>

五、欢迎交流指正


相关文章
|
9月前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
677 59
|
5月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
175 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
5月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
266 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
5月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
199 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
5月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
211 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
11月前
|
JavaScript
Vue学习之--------插槽【默认插槽、具名插槽、作用域插槽】(2022/8/30)
这篇文章详细介绍了Vue中的插槽(Slots)概念,包括默认插槽、具名插槽和作用域插槽的用法。通过实际的代码示例和项目结构,文章展示了如何在组件中定义和使用插槽,以及如何通过插槽向组件传递内容和数据。
Vue学习之--------插槽【默认插槽、具名插槽、作用域插槽】(2022/8/30)
|
11月前
Vue3中getCurrentInstance如何与ts结合使用
【8月更文挑战第16天】Vue3中getCurrentInstance如何与ts结合使用
353 2
Vue3中getCurrentInstance如何与ts结合使用
|
10月前
|
前端开发
vue3+ts项目中使用mockjs
vue3+ts项目中使用mockjs
469 58
|
8月前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
182 2
|
9月前
|
JavaScript 前端开发
VUE学习三:双向绑定指令(v-mode)、组件化开发(全局组件/局部组卷/组件通信)、组件化高级(slot插槽使用)
这篇文章是关于Vue.js框架中的v-model指令和组件化开发的详细教程,涵盖了从基础使用到高级功能的多个方面。
128 1