vue2笔记10 插槽

让父组件向子组件指定位置插入html结构

默认插槽

定义

<template>
  <div class="hello">
    <h3>title</h3>
    <!-- 定义一个插槽,将使用组件标签时传递的内容(innerText/innerHtml)填充到此处 -->
    <slot>默认值,使用组件标签时没有传内容则显示这个</slot>
  </div>
</template>

使用

<template>
  <div class="container">
    <HelloWorld>
      123
    </HelloWorld>
    <HelloWorld>
      <button>456</button>
    </HelloWorld>
    <HelloWorld/>
  </div>
</template>

注,通过插槽填入的元素样式通过所在的组件定义,在使用处定义scoped样式不会生效

具名插槽

<template>
  <div class="hello">
    <h3>title</h3>
    default:
    <slot>默认值,使用组件标签时没有传内容则显示这个</slot>
    slot1:
    <slot name="slot1">slot1</slot>
    slot2:
    <slot name="slot2">slot2</slot>
  </div>
</template>
<template>
  <div class="container">
    <HelloWorld>
      <!-- 只能在template上使用v-slot指令 -->
      <template v-slot:default>
        123
      </template>
      <template v-slot:slot1>
        <a href="">slot1</a>
      </template>
      <!-- 在组件上指定插槽名 -->
      <button slot="slot2">slot2</button>
    </HelloWorld>
    <HelloWorld>
      <h3>456</h3>
    </HelloWorld>
    <HelloWorld/>
  </div>
</template>

作用域插槽

数据在组件中定义,数据的呈现形式在插槽使用者中中定义

<template>
  <div class="hello">
    <!-- 将数据传递给插槽使用者 -->
    <slot :datalist="datalist"></slot>
  </div>
</template>
<template>
  <div class="container">
    <HelloWorld>
      <!-- 绑定插槽属性 -->
      <template v-slot:default="slotProps">
        <ul>
          <li v-for="(item,index) in slotProps.datalist" :key="index">{{ item }}</li>
        </ul>
      </template>
    </HelloWorld>
    <HelloWorld>
      <!-- 支持解构赋值 -->
      <template v-slot:default="{datalist}">
        <h2 v-for="(item,index) in datalist" :key="index">{{ item }}</h2>
      </template>
    </HelloWorld>
    <!-- 只有金存在默认插槽时,可以直接在组件上绑定属性 -->
    <HelloWorld v-slot="slotProps">
      <ol>
        <li v-for="(item,index) in slotProps.datalist" :key="index">{{ item }}</li>
      </ol>
    </HelloWorld>
  </div>
</template>

posted on   路过君  阅读(42)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2020-04-11 spring 启动时自动运行
2020-04-11 spring cloud oauth2授权服务 默认tokenService配置源码
2020-04-11 spring cloud 搭建oauth2授权服务 使用redis存储令牌
2020-04-11 spring cloud oauth2授权服务 clientDetails配置源码
2020-04-11 spring 验证框架
2020-04-11 IDEA 插件整理
2020-04-11 spring security笔记 默认登陆页面源码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示