IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue:匿名slot、具名slot、作用域slot(技术栈Vue3 + TS) -> 正文阅读

[JavaScript知识库]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>

五、欢迎交流指正?

六、参考链接:

http://lanwuyaojiu.cn/blogm/blogart-113.html

Vue中slot的使用(通俗易懂)_zhouzuoluo的博客-CSDN博客_slot

vue3作用域插槽 - 哔哩哔哩

'v-slot' directive must be owned by a custom element

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:41:13  更:2022-03-13 21:41:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:30:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码