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>的理解与使用 -> 正文阅读

[JavaScript知识库]Vue插槽<slot>的理解与使用

插槽简单理解:一个坑一个萝卜,(坑)插槽准备好,坐等(萝卜)html结构放进去。

🔵默认插槽

使用方式:在父组件中,在组件标签内添加html结构;在子组件中,在需要放置这个html结构的位置定义插槽。一个slot里面是可以放入多个html标签结构的。

代码示例:

//第一种情况,父组件内子组件标签没有html结构的情况
//子组件代码
<template>
  <div class="category">
      <h3>{{title}}推荐</h3>
      <!-- 定义插槽 -->
      <slot>此处如果没有html结构,默认展示此文字</slot>
  </div>
</template>

//父组件代码
<template>
  <div class="container">   
    <Category title="美食"></Category>
  </div>
</template>



//第二种情况,父组件内子组件标签有html结构的情况
//子组件代码
<template>
  <div class="category">
      <h3>{{title}}推荐</h3>
      <!-- 定义插槽 -->
      <slot>此处如果没有html结构,默认展示此文字</slot>
  </div>
</template>

//父组件代码
<template>
  <div class="container">   
    <Category title="美食">
      <img src="./assets/美食.jpg" alt="">
    </Category>
  </div>
</template>

效果展示:

?第一种情况效果:

第二种情况效果:

🔶具名插槽

使用方式:在默认插槽的基础上,给每个定义的插槽添加一个名字属性name,使用的时候需要在对应html标签内添加slot="名字属性值"。如果插槽有名字,html标签使用时不加上这个属性值不会报错,不会显示相应的内容;如果使用了template标签可以使用v-slot:属性值来绑定到对应插槽。

代码示例:

//情况一:
//子组件代码:
<template>
  <div class="category">
      <h3>{{title}}推荐</h3>
      <!-- 定义插槽 -->
      <slot name="center">此处如果没有添加属性值center,默认展示此文字</slot>
      <slot name="footer">此处如果没有添加属性值footer,默认展示此文字</slot>
  </div>
</template>
//父组件代码:
<template>
  <div class="container">   
    <Category title="美食">
      <img src="./assets/美食.jpg" alt="">
      <h3>清补凉</h3>
      <ul>
        <li>健脾益气</li>
        <li>清热润肺</li>
      </ul>
    </Category>
  </div>
</template>



//情况二:
//子组件代码:
<template>
  <div class="category">
      <h3>{{title}}推荐</h3>
      <!-- 定义插槽 -->
      <slot name="center">此处如果没有添加属性值center,默认展示此文字</slot>
      <slot name="footer">此处如果没有添加属性值footer,默认展示此文字</slot>
  </div>
</template>
//父组件代码:
<template>
  <div class="container">   
    <Category title="美食">
      <img slot="center" src="./assets/美食.jpg" alt="">
      <h4 slot="center">清补凉</h4>
    <div slot="footer">      
      <ul>
        <li>健脾益气</li>
        <li>清热润肺</li>
      </ul>
    </div>
    </Category>
  </div>
</template>


//情况三:
//使用template标签时
    <template v-slot:footer>      
      <ul>
        <li>健脾益气</li>
        <li>清热润肺</li>
      </ul>
    </template>

?效果展示:

?第一种情况效果:

??第二、三种情况效果:

🔺作用域插槽

当数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定的时候,需要使用到作用域插槽。

注意,组件的使用者在使用作用域插槽的时候需要在html结构外面包裹一个template标签,template标签添加一个scope属性,此时能获得一个对象,我们需要的是对象里面的数据,scope属性支持结构赋值,scope属性有两种写法,一种是scope="值",另外一种是slot-scope="值"。

代码示例:

//子组件代码
<template>
  <div class="category">
      <h3>{{title}}推荐</h3>
      <!-- 定义插槽 -->
      <slot :films="films">如果没有html结构,默认展示此段文字</slot>
  </div>
</template>

<script>
export default {
name:'Category',
props:['title'],
  data() {
    //   数据在组件自身
    return {
      films:['圆梦巨人','疯狂动物城','无间道','千与千寻']
    }
  },
}
</script>

<style>
.category{
    background-color:antiquewhite;
    width: 200px;
    height: 200px;
}
h3{
    text-align: center;
    background-color: orange;
}
</style>

//父组件代码
<template>
  <div class="container">   
    <Category title="电影">
     <template scope="films">
      <ul>
        <li style="color:green" v-for="(f,index) in films.films" :key="index">{{f}}</li>
      </ul>
     </template>
    </Category>
     <Category title="电影">
      <!-- 解构赋值写法 -->
     <template scope="{films}">
      <ol>
        <li style="color:purple" v-for="(f,index) in films" :key="index">{{f}}</li>
      </ol>
     </template>
    </Category>
  </div>
</template>

<script>
  import Category from './components/Category'
  export default {
    name: 'App',
    //组件的使用者
    components:{Category}
  }
</script>

<style lang="css">
.container{
  display: flex;
  justify-content: space-around;
}
</style>

效果展示:


🚩总结

  • 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件 ===> 子组件。
  • 分类:默认插槽、具名插槽、作用域插槽
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 10:58:49  更:2022-05-06 10:58:52 
 
开发: 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/23 23:33:14-

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