使用vue2.0或vue3.0创建自定义组件
Vue2.0创建自定义组件
在 Vue 2.0 中创建自定义组件是一个相对简单的过程。以下是一个详细的步骤指南,帮助你创建一个自定义组件。
步骤 1: 创建 Vue 组件文件
首先,你需要创建一个新的 Vue 文件(.vue 文件)。假设我们要创建一个名为 MyButton 的按钮组件。
bash
touch src/components/MyButton.vue
步骤 2: 编写组件模板
打开 MyButton.vue 文件,并编写组件的模板部分。模板部分定义了组件的 HTML 结构。
vue
<template> <button :class="['my-button', type]" @click="handleClick"> <slot></slot> </button> </template>
步骤 3: 添加样式
接下来,在 <style> 标签中添加组件的样式。你可以根据需要添加更多的样式规则。
vue
<style scoped> .my-button { padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; outline: none; } .my-button.primary { background-color: #42b983; color: white; } .my-button.secondary { background-color: #ccc; color: black; } .my-button:hover { opacity: 0.8; } </style>
步骤 4: 编写脚本
在 <script> 标签中编写组件的 JavaScript 逻辑。这里可以定义组件的数据、方法、属性等。
vue
<script> export default { name: 'MyButton', props: { type: { type: String, default: 'primary' } }, methods: { handleClick(event) { this.$emit('click', event); } } }; </script>
步骤 5: 使用自定义组件
最后,在父组件中引入并使用这个自定义组件。假设我们在 App.vue 中使用 MyButton 组件。
在 App.vue 中引入和使用 MyButton 组件
vue
<template> <div id="app"> <h1>欢迎使用 MyButton 组件</h1> <MyButton type="primary" @click="handlePrimaryClick">主要按钮</MyButton> <MyButton type="secondary" @click="handleSecondaryClick">次要按钮</MyButton> </div> </template> <script> import MyButton from './components/MyButton.vue'; export default { name: 'App', components: { MyButton }, methods: { handlePrimaryClick() { alert('点击了主要按钮'); }, handleSecondaryClick() { alert('点击了次要按钮'); } } }; </script> <style> /* 其他样式 */ </style>
完整示例
以下是完整的 MyButton.vue 和 App.vue 文件内容。
src/components/MyButton.vue
vue
<template> <button :class="['my-button', type]" @click="handleClick"> <slot></slot> </button> </template> <script> export default { name: 'MyButton', props: { type: { type: String, default: 'primary' } }, methods: { handleClick(event) { this.$emit('click', event); } } }; </script> <style scoped> .my-button { padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; outline: none; } .my-button.primary { background-color: #42b983; color: white; } .my-button.secondary { background-color: #ccc; color: black; } .my-button:hover { opacity: 0.8; } </style>
src/App.vue
vue
<template> <div id="app"> <h1>欢迎使用 MyButton 组件</h1> <MyButton type="primary" @click="handlePrimaryClick">主要按钮</MyButton> <MyButton type="secondary" @click="handleSecondaryClick">次要按钮</MyButton> </div> </template> <script> import MyButton from './components/MyButton.vue'; export default { name: 'App', components: { MyButton }, methods: { handlePrimaryClick() { alert('点击了主要按钮'); }, handleSecondaryClick() { alert('点击了次要按钮'); } } }; </script> <style> /* 其他样式 */ </style>
解释
-
模板 (
<template>):- 使用
<button>标签创建按钮元素。 - 使用
:class动态绑定类名,根据type属性设置不同的样式。 - 使用
<slot>插槽允许父组件传递内容到子组件内部。 - 使用
@click监听点击事件,并调用handleClick方法。
- 使用
-
脚本 (
<script>):- 导出一个对象,定义组件的名称、属性、方法等。
props定义了一个type属性,默认值为'primary'。methods定义了一个handleClick方法,触发click事件并将事件对象传递给父组件。
-
样式 (
<style scoped>):- 使用
.my-button类定义基础样式。 - 使用
.my-button.primary和.my-button.secondary定义不同类型的按钮样式。 - 使用
:hover伪类定义鼠标悬停时的样式。
- 使用
-
父组件 (
App.vue):- 引入
MyButton组件并在components选项中注册。 - 使用
MyButton组件,并传递type属性和click事件处理器。 - 定义
handlePrimaryClick和handleSecondaryClick方法处理按钮点击事件。
- 引入
通过以上步骤,你可以在 Vue 2.0 中成功创建并使用自定义组件。
Vue3.0创建自定义组件
Vue 3.0 引入了许多新特性和改进,使得组件的创建和使用更加简洁和高效。以下是使用 Vue 3.0 创建自定义组件的步骤。
步骤 1: 创建 Vue 组件文件
首先,创建一个新的 Vue 文件(.vue 文件)。假设我们要创建一个名为 MyButton 的按钮组件。
bash
touch src/components/MyButton.vue
步骤 2: 编写组件模板
打开 MyButton.vue 文件,并编写组件的模板部分。模板部分定义了组件的 HTML 结构。
vue
<template> <button :class="['my-button', type]" @click="handleClick"> <slot></slot> </button> </template>
步骤 3: 添加样式
接下来,在 <style> 标签中添加组件的样式。你可以根据需要添加更多的样式规则。
vue
<style scoped> .my-button { padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; outline: none; } .my-button.primary { background-color: #42b983; color: white; } .my-button.secondary { background-color: #ccc; color: black; } .my-button:hover { opacity: 0.8; } </style>
步骤 4: 编写脚本
在 <script setup> 标签中编写组件的 JavaScript 逻辑。Vue 3.0 提供了 <script setup> 语法糖,使代码更简洁。
vue
<script setup> import { defineProps } from 'vue'; const props = defineProps({ type: { type: String, default: 'primary' } }); const emit = defineEmits(['click']); function handleClick(event) { emit('click', event); } </script>
步骤 5: 使用自定义组件
最后,在父组件中引入并使用这个自定义组件。假设我们在 App.vue 中使用 MyButton 组件。
在 App.vue 中引入和使用 MyButton 组件
vue
<template> <div id="app"> <h1>欢迎使用 MyButton 组件</h1> <MyButton type="primary" @click="handlePrimaryClick">主要按钮</MyButton> <MyButton type="secondary" @click="handleSecondaryClick">次要按钮</MyButton> </div> </template> <script setup> import MyButton from './components/MyButton.vue'; function handlePrimaryClick() { alert('点击了主要按钮'); } function handleSecondaryClick() { alert('点击了次要按钮'); } </script> <style> /* 其他样式 */ </style>
完整示例
以下是完整的 MyButton.vue 和 App.vue 文件内容。
src/components/MyButton.vue
vue
<template> <button :class="['my-button', type]" @click="handleClick"> <slot></slot> </button> </template> <script setup> import { defineProps, defineEmits } from 'vue'; const props = defineProps({ type: { type: String, default: 'primary' } }); const emit = defineEmits(['click']); function handleClick(event) { emit('click', event); } </script> <style scoped> .my-button { padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; outline: none; } .my-button.primary { background-color: #42b983; color: white; } .my-button.secondary { background-color: #ccc; color: black; } .my-button:hover { opacity: 0.8; } </style>
src/App.vue
vue
<template> <div id="app"> <h1>欢迎使用 MyButton 组件</h1> <MyButton type="primary" @click="handlePrimaryClick">主要按钮</MyButton> <MyButton type="secondary" @click="handleSecondaryClick">次要按钮</MyButton> </div> </template> <script setup> import MyButton from './components/MyButton.vue'; function handlePrimaryClick() { alert('点击了主要按钮'); } function handleSecondaryClick() { alert('点击了次要按钮'); } </script> <style> /* 其他样式 */ </style>
解释
-
模板 (
<template>):- 使用
<button>标签创建按钮元素。 - 使用
:class动态绑定类名,根据type属性设置不同的样式。 - 使用
<slot>插槽允许父组件传递内容到子组件内部。 - 使用
@click监听点击事件,并调用handleClick方法。
- 使用
-
脚本 (
<script setup>):- 使用
defineProps定义组件的属性。 - 使用
defineEmits定义组件可以触发的事件。 - 定义
handleClick方法,触发click事件并将事件对象传递给父组件。
- 使用
-
样式 (
<style scoped>):- 使用
.my-button类定义基础样式。 - 使用
.my-button.primary和.my-button.secondary定义不同类型的按钮样式。 - 使用
:hover伪类定义鼠标悬停时的样式。
- 使用
-
父组件 (
App.vue):- 引入
MyButton组件并在模板中使用。 - 定义
handlePrimaryClick和handleSecondaryClick方法处理按钮点击事件。
- 引入
通过以上步骤,你可以在 Vue 3.0 中成功创建并使用自定义组件。Vue 3.0 的 <script setup> 语法糖使得代码更加简洁易读。
相关文章:
使用vue2.0或vue3.0创建自定义组件
Vue2.0创建自定义组件 在 Vue 2.0 中创建自定义组件是一个相对简单的过程。以下是一个详细的步骤指南,帮助你创建一个自定义组件。 步骤 1: 创建 Vue 组件文件 首先,你需要创建一个新的 Vue 文件(.vue 文件)。假设我们要创建一…...
Elasticsearch-DSL高级查询操作
一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…...
【Linux】重启系统后开不开机(内核模块丢失问题)
问题 重启后开不开机报错如下: FAILED failed to start load kernel moduiles 可以看到提示module dm_mod not found 缺少了dm_mod 在内核module目录中 reboot重启可以看到这个现象: 可以看到重启启动磁盘,加载不到root 原因 dm_mod模块…...
对golang的io型进程进行off-cpu分析
背景: 对于不能占满所有cpu核数的进程,进行on-cpu的分析是没有意义的,因为可能程序大部分时间都处在阻塞状态。 实验例子程序: 以centos8和golang1.23.3为例,测试下面的程序: pprof_netio.go package m…...
Springboot中使用Retrofit
Retrofit官网 https://square.github.io/retrofit/ 配置gradle implementation("com.squareup.okhttp3:okhttp:4.12.0")implementation ("com.squareup.retrofit2:retrofit:2.11.0")implementation ("com.squareup.retrofit2:converter-gson:2.11.0…...
Ubuntu中配置内网固定IP
文章目录 背景一、配置步骤(一)首先确认网卡名称(二)确认网关(三)备份配置文件(四)编辑配置文件(五)应用配置(六)验证配置 二、注意事…...
ExcelVBA编程输出ColorIndex与对应颜色色谱
标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56,打算分4纵列输出,标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA(Visual Basic for Applications)中ÿ…...
MySQL中in和exists的使用场景
在MySQL中,IN 和 EXISTS 是用于子查询的两种常见方法,它们在不同的场景下有不同的表现和适用性。下面我将详细介绍这两种方法的使用场景、优劣,并通过实验来说明问题。 IN 子查询 使用场景: 当子查询返回的结果集较小且不包含 …...
【多线程2】start 和 run 区别,终止线程,等待线程
Thread 类使用 start 方法,启动一个线程,对于同一个 Thread 对象来说,start 只能调用一次!!! 不怕名字起的长,就怕含义不清楚! 想要启动更多线程,就是得创建新的对象&am…...
富途证券C++面试题及参考答案
C++ 中堆和栈的区别 在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。 从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的…...
Go使用sqlx操作MySQL完整指南
# Go使用sqlx操作MySQL完整指南## 1. 安装依赖bash go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx2. 数据库基础操作 package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx" )// 定…...
Python 爬取网页文字并保存为 txt 文件教程
引言 在网络数据获取的过程中,我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例,介绍如何使用requests库和BeautifulSoup库爬取网页文字…...
时间序列预测论文阅读和相关代码库
时间序列预测论文阅读和相关代码库列表 MLP-based的时间序列预测资料DLinearUnetTSFPDMLPLightTS 代码库以及论文库:Time-Series-LibraryUnetTSFLightTS MLP-based的时间序列预测资料 我会定期把我的所有时间序列预测论文有关的资料链接全部同步到这个文章中&#…...
Mamba安装环境和使用,anaconda环境打包
什么是mamba Mamba是一个极速版本的conda,它是conda的C重新实现,使用多线程并行处理来加速包和依赖项的下载。 Mamba旨在提高安装、更新和卸载Python包的速度,同时保持与conda相同的兼容性和命令行接口。 Mamba的核心部分使用C实现ÿ…...
SSH连接成功,但VSCode连接不成功
环境 在实验室PC上连接服务器234 解决方案:在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上,VSCode会安装一个‘vscode-server’服务来支持远程开发,有时旧的‘vscode-server’文件可能会导致问题,删除旧的&am…...
springboot结合AES和国密SM4进行接口加密
api接口加密 1.为什么需要api接口加密呢? 1.防止爬虫 2.防止数据被串改 3.确保数据安全 2.如何实现接口加密呢? 3.我们可以使用哪些加密算法来加密呢? AES 密码学中的高级加密标准(Advanced Encryption Standard,…...
iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境
在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境,并为每个环境使用不同的 Bundle ID,可以通过以下步骤实现: 步骤 1: 创建不同的 Build Configuration 打开项目: 启动 Xcode 并打开你的项目。 选择项目文件&…...
openeuler24.09 系统无需配置 docker 源即可安装 docker 和 docker-composer
准备工作 1、准备一台刚刚创建的 openeuler24.09 lxc 虚拟机 2、使用 dnf 更新到最新,安装常用 工具 dnf update -y dnf install vim net-tools wget3、设置 ssh 由于ssh 与通常网上教程大同小异,在此我们就略过。 从下图我们可以看到 openeuler24.09 已经远程连接上。 …...
Flask入门:打造简易投票系统
目录 准备工作 创建项目结构 编写HTML模板 编写Flask应用 代码解读 进一步优化 结语 Flask,这个轻量级的Python Web框架,因其简洁和易用性,成为很多开发者入门Web开发的首选。今天,我们就用Flask来做一个简单的投票系统,让你快速上手Web开发,同时理解Flask的核心概…...
日常思考笔记
技术管理, 团队管理,人才培养,梯队建设 项目管理,项目全生命周期,项目进度 考核规范, AQS 是CountDownLatch,ReentrantLock,Semaphore,ReentrantReadWriteLock的基础 vo…...
终极指南:如何用Reset-Windows-Update-Tool快速修复Windows更新故障
终极指南:如何用Reset-Windows-Update-Tool快速修复Windows更新故障 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
国密SM2的P7格式签名,和PKCS#7到底有啥区别?一张图讲清楚
国密SM2的P7格式签名与PKCS#7核心差异解析:从结构到实战 在密码学应用开发中,数字签名格式的标准化是实现安全通信的基础。当开发者从国际通用的PKCS#7标准转向中国自主研发的国密SM2算法体系时,P7签名格式的差异往往成为第一个需要跨越的技术…...
MLIR编译器技术:分层IR设计与AI加速实践
1. MLIR与编译器技术概述 编译器技术作为计算机科学的基础设施,长期以来扮演着将高级语言转换为机器码的关键角色。传统编译器如GCC、LLVM采用固定层次的中间表示(IR),这在通用计算时代表现良好。但随着AI和高性能计算领域对异构硬…...
Faust高级特性:窗口聚合与状态管理完整教程
Faust高级特性:窗口聚合与状态管理完整教程 【免费下载链接】faust Python Stream Processing. A Faust fork 项目地址: https://gitcode.com/gh_mirrors/faus/faust 掌握Faust的窗口聚合与状态管理功能,构建高效的Python流处理应用!&…...
工业级RS-485收发器自主设计:从电路原理到PCB布局的实战指南
1. 项目概述与核心价值 在工业自动化、楼宇控制、能源监控这些领域里,设备之间要“说话”,RS-485总线绝对是那个最可靠、最耐用的“方言”。你可能在PLC、变频器、智能电表或者一堆传感器上见过那两个标着A、B的端子,背后驱动它们的ÿ…...
Wonder3D完整解决方案:从单张图片到高质量3D模型的5步实施路径
Wonder3D完整解决方案:从单张图片到高质量3D模型的5步实施路径 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 面对传统3D建模复杂耗时、学习曲线陡峭…...
收藏!小白程序员轻松入门大模型:3个月实现转岗高薪offer的秘诀
本文针对传统程序员转行AI大模型的困境,提出三条实用路径:RAG应用工程、Agent应用开发、模型微调与部署。强调工程能力在AI应用中的重要性,建议通过解决实际问题积累经验,而非单纯堆砌技术栈。文章指出,懂业务、善工程…...
开源、有文档、能上线的 .NET + Vue 通用权限系统
前言在日常项目开发中,权限管理几乎是每个系统都绕不开的基础模块。从用户登录、菜单控制到数据隔离,一套稳定、灵活、可扩展的权限体系,往往决定了整个项目的成败。然而,从零开始搭建这样的平台,不仅耗时耗力…...
超大规模云服务外计算资源交易:虽有风险但概念已验证,或成新资源获取选项
经济合理性这一趋势积极面易理解。一是价格,有多余计算能力的非超大规模云服务提供商成本结构等与主要供应商不同,闲置资源或低价出售,对控制成本企业重要。二是效率,利用已有计算能力满足需求,无需新建数据中心等&…...
嵌入式开发中的模拟信号处理:ADC、DAC与PWM核心原理与CircuitPython实战
1. 项目概述:从数字世界到物理世界的桥梁在嵌入式开发的世界里,我们写的代码最终是要和物理世界打交道的。物理世界是连续的、模拟的——光线强弱、温度高低、声音大小,这些都不是简单的“开”或“关”,而是平滑变化的连续量。而我…...
