当前位置: 首页 > news >正文

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

解释

  1. 模板 (<template>):

    • 使用 <button> 标签创建按钮元素。
    • 使用 :class 动态绑定类名,根据 type 属性设置不同的样式。
    • 使用 <slot> 插槽允许父组件传递内容到子组件内部。
    • 使用 @click 监听点击事件,并调用 handleClick 方法。
  2. 脚本 (<script>):

    • 导出一个对象,定义组件的名称、属性、方法等。
    • props 定义了一个 type 属性,默认值为 'primary'
    • methods 定义了一个 handleClick 方法,触发 click 事件并将事件对象传递给父组件。
  3. 样式 (<style scoped>):

    • 使用 .my-button 类定义基础样式。
    • 使用 .my-button.primary 和 .my-button.secondary 定义不同类型的按钮样式。
    • 使用 :hover 伪类定义鼠标悬停时的样式。
  4. 父组件 (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>

解释

  1. 模板 (<template>):

    • 使用 <button> 标签创建按钮元素。
    • 使用 :class 动态绑定类名,根据 type 属性设置不同的样式。
    • 使用 <slot> 插槽允许父组件传递内容到子组件内部。
    • 使用 @click 监听点击事件,并调用 handleClick 方法。
  2. 脚本 (<script setup>):

    • 使用 defineProps 定义组件的属性。
    • 使用 defineEmits 定义组件可以触发的事件。
    • 定义 handleClick 方法,触发 click 事件并将事件对象传递给父组件。
  3. 样式 (<style scoped>):

    • 使用 .my-button 类定义基础样式。
    • 使用 .my-button.primary 和 .my-button.secondary 定义不同类型的按钮样式。
    • 使用 :hover 伪类定义鼠标悬停时的样式。
  4. 父组件 (App.vue):

    • 引入 MyButton 组件并在模板中使用。
    • 定义 handlePrimaryClick 和 handleSecondaryClick 方法处理按钮点击事件。

通过以上步骤,你可以在 Vue 3.0 中成功创建并使用自定义组件。Vue 3.0 的 <script setup> 语法糖使得代码更加简洁易读。

相关文章:

使用vue2.0或vue3.0创建自定义组件

Vue2.0创建自定义组件 在 Vue 2.0 中创建自定义组件是一个相对简单的过程。以下是一个详细的步骤指南&#xff0c;帮助你创建一个自定义组件。 步骤 1: 创建 Vue 组件文件 首先&#xff0c;你需要创建一个新的 Vue 文件&#xff08;.vue 文件&#xff09;。假设我们要创建一…...

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…...

【Linux】重启系统后开不开机(内核模块丢失问题)

问题 重启后开不开机报错如下&#xff1a; FAILED failed to start load kernel moduiles 可以看到提示module dm_mod not found 缺少了dm_mod 在内核module目录中 reboot重启可以看到这个现象&#xff1a; 可以看到重启启动磁盘&#xff0c;加载不到root 原因 dm_mod模块…...

对golang的io型进程进行off-cpu分析

背景&#xff1a; 对于不能占满所有cpu核数的进程&#xff0c;进行on-cpu的分析是没有意义的&#xff0c;因为可能程序大部分时间都处在阻塞状态。 实验例子程序&#xff1a; 以centos8和golang1.23.3为例&#xff0c;测试下面的程序&#xff1a; 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

文章目录 背景一、配置步骤&#xff08;一&#xff09;首先确认网卡名称&#xff08;二&#xff09;确认网关&#xff08;三&#xff09;备份配置文件&#xff08;四&#xff09;编辑配置文件&#xff08;五&#xff09;应用配置&#xff08;六&#xff09;验证配置 二、注意事…...

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…...

MySQL中in和exists的使用场景

在MySQL中&#xff0c;IN 和 EXISTS 是用于子查询的两种常见方法&#xff0c;它们在不同的场景下有不同的表现和适用性。下面我将详细介绍这两种方法的使用场景、优劣&#xff0c;并通过实验来说明问题。 IN 子查询 使用场景&#xff1a; 当子查询返回的结果集较小且不包含 …...

【多线程2】start 和 run 区别,终止线程,等待线程

Thread 类使用 start 方法&#xff0c;启动一个线程&#xff0c;对于同一个 Thread 对象来说&#xff0c;start 只能调用一次&#xff01;&#xff01;&#xff01; 不怕名字起的长&#xff0c;就怕含义不清楚&#xff01; 想要启动更多线程&#xff0c;就是得创建新的对象&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 文件教程

引言 在网络数据获取的过程中&#xff0c;我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例&#xff0c;介绍如何使用requests库和BeautifulSoup库爬取网页文字…...

时间序列预测论文阅读和相关代码库

时间序列预测论文阅读和相关代码库列表 MLP-based的时间序列预测资料DLinearUnetTSFPDMLPLightTS 代码库以及论文库&#xff1a;Time-Series-LibraryUnetTSFLightTS MLP-based的时间序列预测资料 我会定期把我的所有时间序列预测论文有关的资料链接全部同步到这个文章中&#…...

Mamba安装环境和使用,anaconda环境打包

什么是mamba Mamba是一个极速版本的conda&#xff0c;它是conda的C重新实现&#xff0c;使用多线程并行处理来加速包和依赖项的下载。 Mamba旨在提高安装、更新和卸载Python包的速度&#xff0c;同时保持与conda相同的兼容性和命令行接口。 Mamba的核心部分使用C实现&#xff…...

SSH连接成功,但VSCode连接不成功

环境 在实验室PC上连接服务器234 解决方案&#xff1a;在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上&#xff0c;VSCode会安装一个‘vscode-server’服务来支持远程开发&#xff0c;有时旧的‘vscode-server’文件可能会导致问题&#xff0c;删除旧的&am…...

springboot结合AES和国密SM4进行接口加密

api接口加密 1.为什么需要api接口加密呢&#xff1f; 1.防止爬虫 2.防止数据被串改 3.确保数据安全 2.如何实现接口加密呢&#xff1f; 3.我们可以使用哪些加密算法来加密呢&#xff1f; AES 密码学中的高级加密标准&#xff08;Advanced Encryption Standard&#xff0c;…...

iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境

在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境&#xff0c;并为每个环境使用不同的 Bundle ID&#xff0c;可以通过以下步骤实现&#xff1a; 步骤 1: 创建不同的 Build Configuration 打开项目&#xff1a; 启动 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的核心概…...

日常思考笔记

技术管理&#xff0c; 团队管理&#xff0c;人才培养&#xff0c;梯队建设 项目管理&#xff0c;项目全生命周期&#xff0c;项目进度 考核规范&#xff0c; AQS 是CountDownLatch&#xff0c;ReentrantLock&#xff0c;Semaphore&#xff0c;ReentrantReadWriteLock的基础 vo…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...