前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(九)插槽

(九)插槽

作者头像
老怪兽
发布2023-02-22 16:09:31
3460
发布2023-02-22 16:09:31
举报
文章被收录于专栏:老怪兽的前端之旅

插槽

在项目开发种我们只使用props 进行传值往往是完成不了功能需求的,要想开发高阶组件就需要使用插槽了slot,比如在子组件当中动态添加html 文件就需要使用插槽了

一、给组件使用插槽的方法(默认插槽)适用于只有一个插槽的组件

  1. 子组件
代码语言:javascript
复制
// 需要在子组件当中使用 <slot></slot> 标签进行占位
<template>
  <div class="card">
    <div class="title">{{ title }}</div>
    <div class="content">
      <slot></slot>

      // 插槽也可以设置默认值内容,当父组件没有像插槽中添加html 元素时就显示默认值内容
      <!-- <slot>
        <p>默认卡片内容</p>
      </slot> -->
    </div>
  </div>
</template>
  1. 父组件传递html标签
代码语言:javascript
复制
<template>
  <main>
    <div>
      // 这里标签当中的内容会默认放到子组件标签中slot 标签的位置
      <BaseCard title="卡片容器">
        <p>这是卡片的内容</p>
        <p>可以插入任何 HTML 模板</p>
        <a href="#">这是一个超链接</a>
      </BaseCard>
    </div>
  </main>
</template>

二、使用多个插槽占位(命名插槽)适用于有多个插槽的组件

  1. 子组件
代码语言:javascript
复制
<template>
  <div class="card">
    <div class="title">
      <slot name="title"></slot>
    </div>
    <div class="content">
      <slot name="content"></slot>
    </div>
  </div>
</template>
  1. 父组件
代码语言:javascript
复制
<template>
  <main>
    <div>
      <BaseCard>
        <!-- <template v-slot:title> -->
        <template #title>
          <h2>卡片标题</h2>
        </template>
        <!-- <template v-slot:content> -->
        <template #content>
          <p>这是卡片的内容</p>
          <p>可以插入任何 HTML 模板</p>
          <a href="#">这是一个超链接</a>
        </template>
      </BaseCard>
    </div>
  </main>
</template>

三、插槽返回值(作用域插槽)适用于父组件自定义插槽内容又要使用子组件数据

  1. 子组件
代码语言:javascript
复制
<template>
  <div class="card">
    <div class="title">
      <slot name="title" msg="hello我是插槽子组件向父组件传递的内容的内容"></slot>
    </div>
    <div class="content">
      <slot name="content" title="我也是"></slot>
    </div>
  </div>
</template>
  1. 父组件
代码语言:javascript
复制
<template>
  <main>
    <div>
      <BaseCard>
        <template #title="msg">
        <!-- 这里的内容就是子组件向父组件传递的内容 -->
        <div>{{msg}}</div>
        </template>
      </BaseCard>
    </div>
  </main>
</template>

总结:写在最后

代码语言:javascript
复制
<!-- 我们使用不带名字的插槽的时候,其实有一个默认的名字 -->
<template v-slot:default>
<template/>

<!-- 命名插槽也是一样的通过 v-slot 来绑定插槽的名字 -->
<template v-slot:title>
<template/>

<!-- 同时以上这些所有v-slot都可以简写为 # -->
<template #:default>
<template/>

<template #:title>
<template/>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月4日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 插槽
    • 一、给组件使用插槽的方法(默认插槽)适用于只有一个插槽的组件
      • 二、使用多个插槽占位(命名插槽)适用于有多个插槽的组件
        • 三、插槽返回值(作用域插槽)适用于父组件自定义插槽内容又要使用子组件数据
          • 总结:写在最后
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档