插槽分类

  • 默认插槽(匿名插槽)(单个插槽)
  • 具名插槽
  • 作用域插槽

插槽的作用

让父组件能够向子组件指定地位插入html构造,也是一种组件间通信的形式。插槽显示不显示,怎么显示,是父组件及管制。显示在什么地位,是子组件管制。

应用形式

1.默认插槽

// 父组件<template>    <div class="father">        <h3>这里是父组件</h3>        <child>            <div class="tmpl">              <span>菜单1</span>              <span>菜单2</span>              <span>菜单3</span>            </div>        </child>    </div></template>// 子组件<template>    <div class="child">        <h3>这里是子组件</h3>        <slot></slot>    </div></template>

2.具名插槽

// 父组件<template>  <div class="father">    <h3>这里是父组件</h3>    <child>      // 这里能够应用v-slot。vue2.6当前提出的,然而,必须写在template下面,否则报错,v-slot能够简写成#      // <template v-slot:a>      // <template #a>      <div class="tmpl" slot="a">        <span>菜单1</span>        <span>菜单2</span>        <span>菜单3</span>      </div>      <div class="tmpl" slot="b">        <span>菜单-1</span>        <span>菜单-2</span>        <span>菜单-3</span>      </div>      <div class="tmpl">        <span>菜单->1</span>        <span>菜单->2</span>        <span>菜单->3</span>      </div>    </child>  </div></template>// 子组件<template>  <div class="child">    // 具名插槽    <slot name="a"></slot>    <h3>这里是子组件</h3>    // 具名插槽    <slot name="b"></slot>    // 匿名插槽    <slot></slot>  </div></template>

3.作用域插槽

这个插槽,可能有点难了解,然而还是有应用场景的,就是数据不在父组件,而是在子组件中的时候

// 父组件<template>  <div class="father">    <h3>这里是父组件</h3>    <child>      // <template scope="childData">      // 下面是以前的写法,上面是新的写法,都能够      // 这里必须是template      <template slot-scope="childData">        <span v-for="(item,index) in childData.lists" :key="index">{{item}}</span>      </template>    </child>  </div></template>// 子组件<template>  <div class="child">    <slot :lists="list"></slot>  </div></template>data() {    return {        list: ['菜单1','菜单2','菜单3']    }}