2019.2.12 (vue中slot卡槽)

插槽

在vue中,我们会在开发中经常会使用到插槽slot,通过网上文章的学习,主要参考了这篇文章;https://blog.csdn.net/weixin_41646716/article/details/80450873

单个插槽|匿名插槽|默认插槽

  • 按我的话理解,slot就是在子组件上一个占位符,这个占位符里面的内容由改子组件对应的父组件来写,比方说:

父组件

<div>
    <child>
        <div class="span-box">
            <span>1<span>
            <span>2<span>
            <span>3<span>
        </div>
    </child>
</div>

上面子组件里面的内容就是父组件要放入子组件占位符里面的

子组件

<template>
    <div>
        <span>子组件的span</span>
        <slot></slot>
    </div>
</template>

这样slot就会显示上面父组件的

<div class="span-box">
    <span>1<span>
    <span>2<span>
    <span>3<span>
</div>

具名插槽

  • 就是插槽带名字,这样就可以在一个子组件中有很多个插槽

父组件


<template>
  <div>
    <h3>这里是父组件</h3>
    <child>
      <div slot="first">
        <span>菜单1</span>
        <span>菜单2</span>
      </div>
      <div slot="second">
        <span>菜单-1</span>
        <span>菜单-2</span>
        <span>菜单-3</span>
      </div>
      <div>
        <span>菜单->1</span>
      </div>
    </child>
  </div>
</template>

子组件


<template>
  <div class="child">
    // 具名插槽
    <slot name="first"></slot>
    <h3>这里是子组件</h3>
    // 具名插槽
    <slot name="second"></slot>
    // 匿名插槽
    <slot></slot>
  </div>
</template>

作用域插槽| 带数据的插槽

  • 一般我们slot里面的内容是父组件写好的,那么子组件的slot里面带数据就不一样了,那我父组件来定义样式,数据还是子组件的,解决了普通slot插槽无法在父组件中使用子组件数据的问题

父组件

<template>
  <div class="father">
    <h3>这里是父组件</h3>
    <!--第一次使用:用flex展示数据-->
    <child>
      <template slot-scope="user">
        <div class="tmpl">
          <span v-for="item in user.data">{{item}}</span>
        </div>
      </template>
 
    </child>
 
    <!--第二次使用:用列表展示数据-->
    <child>
      <template slot-scope="user">
        <ul>
          <li v-for="item in user.data">{{item}}</li>
        </ul>
      </template>
 
    </child>
 
    <!--第三次使用:直接显示数据-->
    <child>
      <template slot-scope="user">
       {{user.data}}
      </template>
 
    </child>
 
    <!--第四次使用:不使用其提供的数据, 作用域插槽退变成匿名插槽-->
    <child>
      我就是模板
    </child>
  </div>
</template>

子组件


<template>
  <div class="child">
 
    <h3>这里是子组件</h3>
    // 作用域插槽
    <slot  :data="data"></slot>
  </div>
</template>
 
 export default {
    data: function(){
      return {
        data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba']
      }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 组件(Component)是Vue.js最核心的功能,也是整个架构设计最精彩的地方,当然也是最难掌握的。...
    六个周阅读 5,652评论 0 32
  • Vue的组件提供了一个非常有用的特性,slot插槽,它让组件的实现变的更加灵活。我们平时在开发组件库的时候,为了让...
    LoveBugs_King阅读 5,306评论 0 0
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,275评论 0 25
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,079评论 0 29
  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 9,528评论 0 13