插槽根本应用

父组件

index.vue

<son1>  <template>    I'm content  </template></son1>components: {    son1: () => import('./son1.vue'),}

子组件

son1.vue

<div>  <!-- 定义插槽 -->  <!-- 定义能够用来被替换的构造 -->  <slot>内容</slot></div><div>底部</div>

具名插槽

父组件

index.vue

<son2>  <!-- 简写模式 vant -->  <template #content>I'm content</template>  <template #foot>I'm foot</template>  <!-- 原始模式 -->  <template v-slot:content>I'm content</template>  <template v-slot:foot>I'm foot</template>  <!-- 被废除的用法:element -->  <template slot="content">我是内容</template>  <template slot="foot">我是底部</template></son2>components: {    son2: () => import('./son2.vue'),}

子组件

son2.vue

<div>  <!-- 定义插槽 -->  <!-- 定义能够用来被替换的构造 -->  <slot name="content">内容</slot></div><div>  <slot name="foot">底部</slot></div>

默认插槽

父组件

index.vue

<son3>  <template slot="content">我是内容</template>  <template slot="foot">我是底部</template>  <template #default>    我是头部的默认插槽  </template></son3>components: {    son3: () => import('./son3.vue'),}

子组件

son3.vue

<div>  <!-- 没有 name 属性的插槽叫做默认插槽 -->  <slot>头部</slot></div><div>  <slot name="content">内容</slot></div><div>  <slot name="foot">底部</slot></div>

作用域插槽

父组件

index.vue

    <son4>      <!-- 给每本书增加一个 《》 -->      <!-- 简写模式: vant -->      <template #content="{list,a}">        <ol>          <li v-for="(item, index) in list" :key="index">            《{{ item.name }}》          </li>        </ol>      </template>       <!-- 原始模式 -->      <template v-slot:content="{list}">        <ol>          <li v-for="(item, index) in list" :key="index">            《{{ item.name }}123》          </li>        </ol>      </template>      <!-- element中被废除的写法 -->      <template slot="content" slot-scope="{ list, a }">        <ol>          <li v-for="(item, index) in list" :key="index">            《{{ item.name }}》          </li>        </ol>        <div>a:{{ a }}</div>      </template>    </son4>

子组件

son4.vue

<div>  <slot name="content" :list="list" a="a">    <ol>      <li v-for="(item, index) in list" :key="index">        {{ item.name }}      </li>    </ol>  </slot></div>data () {  return {    list: [      { id: 1, name: '三国演义' },      { id: 2, name: '红楼梦' },      { id: 3, name: '西游记' },      { id: 4, name: '水浒传' }    ]  }}