当前位置:首页 » 《随便一记》 » 正文

Vue学习第21天——插槽slot的理解及案例

12 人参与  2022年09月17日 16:59  分类 : 《随便一记》  评论

点击全文阅读


这里写目录标题

一、什么是插槽1、作用2、语法3、配置项4、注意项4、插槽分类 二、默认插槽与具名插槽案例三、作用域插槽案例四、总结

一、什么是插槽

1、作用

组件间的一种通信方式。让父组件可以向子组件指定位置插入html结果

2、语法

<slot></slot>
元素作为组件模板之中的内容分发插槽。 元素自身内容将被替换。

3、配置项

name:用于命名插槽。

4、注意项

在2.6.0中,Vue为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令),它取代了 slot 和 slot-scope语法

4、插槽分类

默认插槽
具名插槽
作用域插槽

二、默认插槽与具名插槽案例

需求:通过app组件向category组件传递html结构

App组件代码

<template>  <div id="app">    <Category  title="美食">      <ul v-for="(li,index) in foods" :key="index">        <li>{{li}}</li>      </ul>      <!-- 具名插槽 -->      <h4 slot="others">秀色可餐</h4>    </Category>    <Category  title="汽车">      <ul v-for="(li,index) in cars" :key="index">         <li>{{li}}</li>      </ul>      <h4 slot="others">好车好景</h4>    </Category>  </div></template><script>import Category from "./components/Category.vue";export default {  name: 'App',  components:{Category},  data () {    return {     foods:["苹果","香蕉","桃子"],     cars:["奥迪","宝马","奔驰"],    }  }}</script><style>#app {   display: flex;   justify-content: space-between;}img {  width: 150px;}h4 {  color: red;}</style>

category组件代码

<template>  <div class="category">    <h3>{{this.title}}分类</h3>    <slot>我是默认插槽</slot>    <slot name="others">我是具名插槽</slot>  </div></template><script>export default {  name:"Category",  props:["title"]}</script><style>  .category {    width: 200px;    height: 300px;    background-color: rgb(236, 219, 231);  }  h3 {    text-align: center;  }</style>

运行结果
在这里插入图片描述
注意点:
1、<slot></slot>标签内为后备内容,只会在没有提供内容的时候被渲染
2、样式写在父组件时,在父组件中解析完模板和样式之后再传入子组件

三、作用域插槽案例

需求:根据category组件提供的数据,在App组件中展示不同的样式

理解:数据在子组件,但渲染的样式需要父组件决定

App组件代码

<template>  <div id="app">    <Category title="无序列表">      <template scope="scopeData">        <ul>          <li v-for="(cat,index) in scopeData.cats" :key="index">{{cat}}</li>        </ul>      </template>    </Category>    <Category title="有序列表">      <template scope="scopeData">        <ol>          <li v-for="(cat,index) in scopeData.cats" :key="index">{{cat}}</li>        </ol>      </template>    </Category>     <Category title="H5列表">      <template scope="scopeData">          <h5 v-for="(cat,index) in scopeData.cats" :key="index">{{cat}}</h5>      </template>    </Category>  </div></template><script>import Category from "./components/Category.vue";export default {  name: 'App',  components:{Category},}</script><style>#app {   display: flex;   justify-content: space-between;}img {  width: 150px;}h4 {  color: red;}</style>

Ctegory组件代码

```html<template>  <div class="category">    <h3>{{title}}</h3>      <slot :cats="cats">默认内容</slot>  </div></template><script>export default {  name:"Category",  props:["title"],  data () {    return {      cats:["小猫","小狗","兔子"]    }  },}</script><style>  .category {    width: 200px;    height: 200px;    background-color: rgb(236, 219, 231);  }  h3 {    text-align: center;  }</style>

运行结果
在这里插入图片描述
注意点:
1、在2.5.0版本中,scope被新增的 slot-scope 取代,在2.6.0版本中,slot-scope又被v-slot取代
2、 v-slot 只能添加在<template>上 (只有一种例外情况)。

四、总结

1、插槽的本质:组件间通信的一种方式
2、作用是为了实现父组件可以向子组件指定位置插入html结构。
3、具名插槽:带有名字的插槽(带有name属性)
4、作用域插槽:有作用域限制的插槽,作用域插槽可以用来实现数据在子组件中,但是最终渲染的效果需要父组件来决定的情况


点击全文阅读


本文链接:http://zhangshiyu.com/post/44964.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 爱也沧沧,恨也沧沧章节限时抢先看‌_「贺景川宋南乔贺景明」小说精彩章节免费试读
  • 被逼退婚后,我成了极道女王小说节选免费试读_「梁书沈漓冷笑」后续更新+番外
  • 人皇觉醒,屠天灭神限时免费章节抢先看_[墨如渊苏明明薇]小说精彩章节免费试读
  • (番外)+(全书)乔喜商凛(也曾偷藏欢喜结局+番外)全书在线_(乔喜商凛)列表_笔趣阁(也曾偷藏欢喜结局+番外)
  • 「为你归雪满舟」精彩章节试读_谢景期俞诗俞家独家章节限时试读
  • (番外)+(全书)男友帮假千金冒充我,我靠弹幕杀疯了(陈子期林依然+番外+全书)_(男友帮假千金冒充我,我靠弹幕杀疯了+番外+全书)免费_笔趣阁(陈子期林依然)
  • (番外)+(全书)商凛乔喜乔雪眠(乔喜商凛乔雪眠+后续+结局)_商凛乔喜乔雪眠免费列表_笔趣阁(乔喜商凛乔雪眠+后续+结局)
  • 许我三千繁星愿结局+番外(楚砚风慕星眠)完结_(许我三千繁星愿结局+番外)列表_笔趣阁(楚砚风慕星眠)
  • 时年田野田欣瑶男友为妹妹推迟婚宴后我上了别人的婚车全书+后续+结局列表_笔趣阁(男友为妹妹推迟婚宴后我上了别人的婚车全书+后续+结局时年田野田欣瑶)
  • 裴谨言桑年你是我未拆的遗书结局+番外列表_笔趣阁(你是我未拆的遗书裴谨言桑年结局+番外)
  • 也曾偷藏欢喜全书+后续列表_也曾偷藏欢喜全书+后续(乔喜商凛)
  • 许我永远爱你结局+番外免费_(沧溟星茗姬俏)许我永远爱你结局+番外全书列表

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1