Vue中如何构建组件,支持传参、插槽等功能。

news2024/11/13 19:40:56

目录

1. 创建基本的Vue组件

2. 使用组件

3. 支持插槽

3.1 默认插槽

3.2 使用插槽

4. 作用域插槽

5. 使用作用域插槽

总结


在Vue.js中,组件是构建UI的基本单元,通过组件可以实现代码的复用和组织。以下是如何编写可复用的Vue组件的详细步骤,包括传参、插槽等功能的实现。

1. 创建基本的Vue组件

首先,使用Vue单文件组件(.vue 文件)来定义一个组件。以下是一个简单的组件示例:

<!-- MyButton.vue -->
<template>
  <button @click="handleClick">{{ label }}</button>
</template>

<script>
export default {
  name: 'MyButton',
  props: {
    label: {
      type: String,
      default: '点击我' // 默认值
    }
  },
  methods: {
    handleClick() {
      this.$emit('clicked'); // 发出点击事件
    }
  }
}
</script>

<style scoped>
button {
  padding: 10px 20px;
  background-color: #007bff;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
button:hover {
  background-color: #0056b3;
}
</style>

2. 使用组件

在父组件中使用这个可复用的组件,并传递参数:

<!-- App.vue -->
<template>
  <div>
    <MyButton label="提交" @clicked="handleSubmit" />
    <MyButton label="取消" @clicked="handleCancel" />
  </div>
</template>

<script>
import MyButton from './MyButton.vue';

export default {
  name: 'App',
  components: {
    MyButton
  },
  methods: {
    handleSubmit() {
      alert('提交按钮被点击');
    },
    handleCancel() {
      alert('取消按钮被点击');
    }
  }
}
</script>

<style>
/* 样式可选 */
</style>

3. 支持插槽

插槽(slot)是Vue中实现组件内容灵活性的关键特性,它允许在使用组件时提供不同的内容。可以使用具名插槽、作用域插槽等多种方式。

3.1 默认插槽

以下是将插槽添加到组件中的示例:

<!-- MyCard.vue -->
<template>
  <div class="card">
    <div class="card-header">
      <slot name="header">默认标题</slot>
    </div>
    <div class="card-body">
      <slot>默认内容</slot>
    </div>
  </div>
</template>

<script>
export default {
  name: 'MyCard'
}
</script>

<style scoped>
.card {
  border: 1px solid #ccc;
  border-radius: 5px;
  margin: 10px;
}
.card-header {
  font-weight: bold;
  padding: 10px;
  background-color: #f8f9fa;
}
.card-body {
  padding: 10px;
}
</style>
3.2 使用插槽

现在,在父组件中使用这个MyCard组件,并传递插槽内容:

<!-- App.vue -->
<template>
  <div>
    <MyCard>
      <template #header>
        <h2>自定义标题</h2>
      </template>
      <p>这里是自定义内容</p>
    </MyCard>
  </div>
</template>

<script>
import MyCard from './MyCard.vue';

export default {
  name: 'App',
  components: {
    MyCard
  }
}
</script>

<style>
/* 样式可选 */
</style>

4. 作用域插槽

作用域插槽允许父组件访问子组件提供的内容。通常用于当子组件需要将某些值发送回父组件时。

示例

<!-- ItemList.vue -->
<template>
  <div>
    <slot v-for="item in items" :item="item" :key="item.id">
      默认内容
    </slot>
  </div>
</template>

<script>
export default {
  name: 'ItemList',
  props: {
    items: {
      type: Array,
      required: true
    }
  }
}
</script>
5. 使用作用域插槽

在父组件中,这样使用ItemList组件:

<!-- App.vue -->
<template>
  <div>
    <ItemList :items="itemList">
      <template v-slot="{ item }">
        <div>{{ item.name }}</div>
      </template>
    </ItemList>
  </div>
</template>

<script>
import ItemList from './ItemList.vue';

export default {
  name: 'App',
  components: {
    ItemList,
  },
  data() {
    return {
      itemList: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' },
      ]
    }
  }
}
</script>

总结

  1. 组件创建:定义组件时,使用templatescriptstyle部分,确保组件是可复用的。
  2. 传参:通过props接收父组件传来的参数。
  3. 插槽实现:使用插槽实现组件内容的灵活性,通过<slot>占位符和射流属性(具名插槽、作用域插槽)实现。
  4. 父子组件通信:通过$emit和插槽支持父子组件之间的通信,使得组件能够在满足封装的同时实现交互。

使用这些方法,可以构建出功能丰富、可复用的Vue组件,为你的应用提供更好的结构和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv实时弯道检测

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

怎么禁止文件外发?企业如何禁止文件外发,教你6种方法,综合运用效果加倍

在当今数字化的商业环境中&#xff0c;企业内部文件承载着大量关键信息&#xff0c;犹如企业的命脉。这些文件可能包含着核心技术机密、客户资料、未公开的战略规划以及敏感的财务数据等&#xff0c;它们是企业在激烈市场竞争中立足的重要资产。然而&#xff0c;随着信息传播途…

SCI论文数据可视化的在线网址

目录 SCI论文数据可视化的在线网址 EVenn(Evenn):免费 SCI论文数据可视化的在线网址 数据可视化的在线网址,以下是一些值得推荐的资源: ImageGP(ImageGP | ImageGP):该平台可以在线生成常见的线图、柱状图、散点图、箱线图、集合图、热图和直方图等。用户只需粘贴数…

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…

DB-GPT系列(六):数据Agent开发part1-光速创建AWEL Agent应用

前面的系列文章介绍了&#xff1a; DB-GPT的总体功能 DB-GPT部署&#xff08;镜像一键部署、源码部署&#xff09; DB-GPT底层模型设置&#xff08;开源模型、在线模型&#xff09; DB-GPT的基础对话、知识库对话、excel对话 DB-GPT的数据库对话、数据对话、仪表盘对话 通…

OpenGL ES 文字渲染方式有几种?

在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。 实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。 本文分别介绍下在应用层和 C+…

简单介绍一下mvvm mvc mvp以及区别、历史

MVC&#xff08;Model - View - Controller&#xff09; 因MVC架构的灵活性&#xff0c;架构图形式很多&#xff0c;仅供参考 历史&#xff1a; MVC 是最早出现的软件架构模式之一&#xff0c;其历史可以追溯到 20 世纪 70 年代&#xff0c;最初被用于 Smalltalk - 80 环境。…

scrcpy-client pyscrcpy 报ConnectionError(“Video stream is disconnected“)

异常 Video stream is disconnected代码详情&#xff0c;scrcpy-client 使用0.4.7版本 import time import scrcpy from adbutils import adb import cv2def on_frame(frame):# If you set non-blocking (default) in constructor, the frame event receiver# may receive No…

新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)

常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了&#xff0c;我基本上都是通过docker去管理一些容器如&#xff1a;mysql、redis、mongoDB等之类的镜像&#xff0c;还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题&#xff0c;你需要先安装好主题&#xff0c;然后可以导入我的json文件一键配置。 需要json界面配置文件的&#xff0c;可以在评论区回复&#xff0c;看见评论我会私发给你。~

VMware Workstation Pro 最新版下载路径图示

从 2024 年 5 月开始&#xff0c;VMware Workstation Pro 宣布免费供个人使用。这意味着我们可以在无需许可证密钥或任何持续费用的前提下&#xff0c;在 Windows 或 Linux 上下载并使用这款强大的虚拟机软件的全部功能。 1、进入官网 你会发现找不到VMware workstation Pro 的…

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例&#xff1f; 测试⽤例&#xff08;Test Case&#xff09;是为了实施测试⽽向被测试的系统提供的⼀组集合&#xff0c;这组集合包…

linux命令详解,ssh服务+远程拷贝

ssh服务 ssh&#xff08;Secure Shell&#xff09;命令用于安全地远程登录到另一台计算机&#xff0c;并执行命令和传输文件。ssh 提供了加密的通信通道&#xff0c;确保数据传输的安全性。 ssh [选项] [用户]主机 [命令]常用选项 -V&#xff1a;显示 ssh 版本信息。-v&…

“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“

我的个人主页 接下来我将方享四道由易到难的编程题&#xff0c;进入我们的JavaSE复习之旅。 1&#xff1a;大小写转换------题目链接 解题思路&#xff1a; 在ASCII码表中&#xff0c;⼤写字⺟A-Z的Ascii码值为65- 90&#xff0c;⼩写字⺟a-z的Ascii码值为97-122。每个字 ⺟…

SQL面试题——飞猪SQL面试 重点用户

飞猪SQL面试题—重点用户 在一些场景中我们经常听到这样的一些描述&#xff0c;例如20%的用户贡献了80%的销售额&#xff0c;或者是20%的人拥有着80%的财富&#xff0c;你知道这样的数据是怎么算出来的吗 数据如下,uid 是用户的id ,amount是用户的消费金额 |uid|amount| ---…

操作系统OS--进程

目录 操作系统是什么 进程 进程的状态 1.并行和并发 2.时间片 进程优先级 进程切换 task_struct内容分类&#xff1a; 操作系统是什么 操作系统本质上是一款纯正的“搞管理”的软件 你的程序不能直接写入硬件&#xff0c;都必须通过操作系统 对软硬件之间进行交互&…

Spring——容器:IoC

容器&#xff1a;IoC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来…

全自动火腿肉馅斩拌机:

全自动火腿肉馅斩拌机通过斩切作用提高产品的细密度和弹性&#xff0c;广泛应用于肉制品的深加工制作&#xff0c;如制作肉丸、香肠等。其工作原理是利用斩刀高速旋转的斩切作用&#xff0c;将原料进行斩切和乳化处理&#xff0c;从而提高产品的细腻度和弹性。斩拌机具有以下特…

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…

NCC前端调用查询弹框

系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中&#xff0c;有个查询区域 &#xff0c;查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题&#xff0c;但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…