Vue.js组件开发详解
在现代前端开发中,Vue.js 凭借其简洁、高效、灵活的特性,成为了众多开发者的首选框架之一,而组件化开发则是 Vue.js 的核心优势。组件可以将复杂的 UI 界面拆分成一个个独立的、可复用的小块,极大地提高了开发效率和代码的可维护性。
一、组件基础概念
组件是 Vue.js 应用的基本构建块,每个组件都有自己的模板(template)、数据(data)、方法(methods)、生命周期钩子等。模板定义了组件的结构,数据驱动着模板的渲染,方法处理组件内的交互逻辑,生命周期钩子则让组件能在不同阶段执行特定操作。
例如,一个简单的按钮组件:
<template><button @click="handleClick">{{ buttonText }}</button>
</template><script>
export default {data() {return {buttonText: '点击我'};},methods: {handleClick() {alert('按钮被点击了');}}
};
</script>
这里定义了一个按钮组件,它有一个文本数据 buttonText,点击按钮时会触发 handleClick 方法弹出提示框。
二、组件的注册与使用
Vue.js 中组件有两种注册方式:全局注册和局部注册。
全局注册使得组件可以在应用的任何地方使用,通常在 main.js 中进行:
import Vue from 'vue';
import ButtonComponent from './components/ButtonComponent.vue';Vue.component('my-button', ButtonComponent);new Vue({el: '#app'
});
之后在任何 Vue 实例或组件模板中,都能用 <my-button> 标签来调用该按钮组件。
局部注册则是在某个组件内部注册另一个组件,仅限该组件内部及其子组件使用:
<template><div><my-sub-component></my-sub-component></div></template><script>import MySubComponent from './MySubComponent.vue';export default {components: {'my-sub-component': MySubComponent}};</script>
三、组件通信
组件之间往往需要传递数据或触发事件,常见的通信方式有:
- 父子组件通信:
<template><child-component :message="parentMessage"></child-component></template><script>import ChildComponent from './ChildComponent.vue';export default {data() {return {parentMessage: '来自父组件的消息'};},components: {ChildComponent}};</script>
子组件:
<template><p>{{ message }}</p></template><script>export default {props: ['message']};</script><template><button @click="sendDataToParent">向父组件传值</button></template><script>export default {methods: {sendDataToParent() {this.$emit('data-from-child', '子组件的数据');}}};</script>
父组件:
<template><child-component @data-from-child="handleChildData"></child-component></template><script>import ChildComponent from './ChildComponent.vue';export default {methods: {handleChildData(data) {console.log(data);}},components: {ChildComponent}};</script>
-
- 父组件向子组件传值:通过 props。父组件在使用子组件时,绑定属性传递数据,子组件通过 props 接收。
例如:
父组件:
-
- 子组件向父组件传值:通过自定义事件。子组件使用 $emit 触发事件并传递数据,父组件监听该事件接收数据。
例如:
子组件:
- 非父子组件通信:可以使用 Vuex(状态管理库),它提供了一个全局的状态树,组件可以提交 mutations 来修改状态,通过 getters 获取状态,实现跨组件的数据共享与通信。
四、组件的生命周期
Vue.js 组件有一系列生命周期钩子函数,如 created、mounted、updated、destroyed 等。
- created:在组件实例创建完成后立即调用,此时数据观测、事件配置等都已完成,但模板尚未渲染。常用于初始化数据。
- mounted:组件挂载到 DOM 元素后调用,此时可以访问到真实的 DOM 元素,常用于执行需要 DOM 操作的代码,如获取元素尺寸、添加第三方库的初始化等。
- updated:组件数据更新导致虚拟 DOM 重新渲染和打补丁后调用,要注意避免在这个钩子中进行可能导致无限循环更新的数据修改。
- destroyed:组件实例销毁之前调用,用于清理定时器、解绑事件监听器等资源释放操作。
理解并合理运用组件的生命周期钩子,能确保组件在各个阶段正确执行任务,优化性能。
总之,掌握 Vue.js 组件开发是构建高效、健壮前端应用的关键,通过深入学习组件的创建、注册、通信以及生命周期等方面,开发者能够充分发挥 Vue.js 的优势,打造出优质的用户界面。
相关文章:
Vue.js组件开发详解
在现代前端开发中,Vue.js 凭借其简洁、高效、灵活的特性,成为了众多开发者的首选框架之一,而组件化开发则是 Vue.js 的核心优势。组件可以将复杂的 UI 界面拆分成一个个独立的、可复用的小块,极大地提高了开发效率和代码的可维护性…...
解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎…...
深度学习camp-第J7周:对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 📌你需要解决的疑问:这个代码是否有错?对错与否都请给出你的思考 📌打卡要求:请查找相关资料、逐步…...
java: 错误: 无效的源发行版:17解决办法
遇到“java: 错误: 无效的源发行版:17”的问题,通常是因为项目设置中指定的Java版本与当前环境不一致导致的。以下是几种可能的解决方案: 检查并升级Java版本:确保你已经安装了支持Java 17的JDK版本。你可以通过命令行输入java -v…...
Docker 安装开源的IT资产管理系统Snipe-IT
一、安装 1、创建docker-compose.yaml version: 3services:snipeit:container_name: snipeitimage: snipe/snipe-it:v6.1.2restart: alwaysports:- "8000:80"volumes:- ./logs:/var/www/html/storage/logsdepends_on:- mysqlenv_file:- .env.dockernetworks:- snip…...
Go语言封装加解密包(AES/DES/RSA)
Go语言封装加解密包(AES/DES/RSA) 1. Base64编码与解码2. AES加解密3. DES加解密4. RSA加解密5. SHA256哈希6. 单元测试1. AES加解密单元测试2. DES加解密单元测试3. RSA加解密单元测试4. SHA256哈希单元测试测试用例说明 总结 在现代软件开发中…...
sql server 对 nvarchar 类型的列进行 SUM() 运算
因为 SUM() 是一个数值聚合函数,不能直接应用于字符串类型的数据。为了正确汇总标准数量,你需要确保该列的数据类型是数值类型,如 int、decimal 或 float。 假设要统计数量列的和,由于数量列是 nvarchar 类型,你需要先…...
java中json字符串键值获取
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version> </dependency>使用fastjson依赖 JSONObject jsonObject JSON.parseObject(s); 这个jsonObject本质就是一个map&…...
MPLS原理及配置
赶时间可以只看实验部分 由来:90年代中期,互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发,但由于硬件技术存在限制导致转发性能低,查表转发成为了网络数据转发的瓶颈。 因此,旨在提高路由器转发速度的MPL…...
口碑很好的国产LDO芯片,有哪些?
在几乎任何一个电路设计中,都可能会使用LDO(低压差线性稳压器)这个器件。 虽然LDO不是什么高性能的IC,但LDO芯片市场竞争异常激烈。最近几年,诞生了越来越多的精品国产LDO,让人看得眼花缭乱。 业内人士曾经…...
【流程设计】类似钉钉的流程设计功能样式demo
对于一些审批流程,可能会用到这个功能,通过这样一层层的加下来,弄一个审批流程的数组,然后根据这个来审核是否都通过审批,这里是简单的弄一个样式的demo,功能自由发挥 <!DOCTYPE html> <html>…...
ChatGPT入门之文本情绪识别:先了解LSTM如何处理文字序列
文章目录 0. 首先聊聊什么是RNN1. 理解LSTM,从数据如何喂给 LSTM开始2. LSTM每个门是如何处理序列数据的?2.1 遗忘门(Forget Gate):该忘掉哪些信息?2.2 输入门(Input Gate)ÿ…...
测试开发之面试宝典
目录 session和cookie的区别 session和cookie的区别 1.session和cookie都是鍵值对应的 2.session和cookie都是服务器生成的,session的ID,即服各器用来识别读取session对象的一把钥匙 3.session是保存在服各器端,而cookie是返回給客戶端的&…...
399. 除法求值【 力扣(LeetCode) 】
文章目录 零、LeetCode 原题一、题目描述二、测试用例三、解题思路3.1 图的路径搜索3.2 路径压缩 四、参考代码4.1 图的路径搜索4.2 路径压缩 零、LeetCode 原题 399. 除法求值 一、题目描述 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,…...
算法日记1:洛谷p2678跳石头(二分答案)
1、题目 二、题解: 2.1解题思路: 1.题目要求求出最小值最大,明显的二分答案题目,所以我们可以二分可以跳跃距离int l-1,rL1; 2.此时我们思考lmid和rmid的处理,当我们的check(mid)为true时候 表明我们此时的mid是符合要求的, 那么…...
Unity shader中真的可以动态关闭Stencil Test吗?
这个问题很多年前就有人问了: https://discussions.unity.com/t/how-to-disable-the-stencil-block-via-shader-properties/600273/1 最后的答案是: set [_StencilComp] to CompareFunction.Disabled to disable the Stencil Op completely. 但是我测试…...
YOLOv9改进,YOLOv9自研检测头融合HyCTAS的Self_Attention自注意力机制,2024,适合目标检测、分割任务
摘要 论文提出了一种新的搜索框架,名为 HyCTAS,用于在给定任务中自动搜索高效的神经网络架构。HyCTAS框架结合了高分辨率表示和自注意力机制,通过多目标优化搜索,找到了一种在性能和计算效率之间的平衡。 # 理论介绍 自注意力(Self-Attention)机制是HyCTAS框架中的一个…...
计算机网络 (36)TCP可靠传输的实现
前言 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输,这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手࿰…...
Git版本控制 - 创建使用Repository
Git版本控制 – 创建使用Repository Version Control with Git - Create and Use Repository By JacksonML 上文提到,Git是一种分布式版本控制系统。作为全球范围内广泛使用的工具,如何将项目分步骤运用到其中呢? 本文简要介绍如何用Git工…...
MySQL —— 在CentOS9下安装MySQL
MySQL —— 在CentOS9下安装MySQL 1.查看自己操作系统的版本2.找到对应的安装源3.上传我们在windows下,下载的文件,解压4.执行rpm命令,启用MySQL8仓库5.执行dnf install -y mysql-community-server6.设置开机自启动7.获得初始密码8.登录MySQL…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
