使用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…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...