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…...
保姆级教程:用Arduino模拟LIN总线主从通信,手把手调试车窗控制
用Arduino打造LIN总线车窗控制系统:从硬件搭建到防夹算法实现 LIN总线作为汽车电子中的"轻量级选手",在车门控制、座椅调节等场景中扮演着关键角色。相比动辄上千元的专业开发工具,用Arduino模拟LIN总线通信不仅成本可控࿰…...
低空智联网:构建未来空中信息高速公路的架构蓝图
1. 低空智联网:重新定义空中信息高速公路 想象一下这样的场景:数百架无人机在城市上空有序穿梭,有的在配送快递,有的在监测空气质量,还有的在执行紧急救援任务。它们彼此之间能够实时通信,自动避让…...
轻松搞定Excel公式错误:SpreadJS让表格开发不再头疼
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
从‘汉宁窗’到‘凯泽窗’:手把手教你用Python SciPy为你的音频降噪项目挑选最合适的FIR窗函数
从‘汉宁窗’到‘凯泽窗’:Python SciPy窗函数在音频降噪中的实战选择指南 当一段珍贵的录音被50Hz工频噪声污染时,我们面临的不仅是技术问题,更是艺术与科学的平衡。窗函数作为FIR滤波器设计中的关键参数,直接影响着滤波器在频率…...
小步快跑・像CPU一样调度大脑高并发——东方仙盟・阿雪心学
从时间切片到任务切换,构建不颠簸、高效率的思维架构为什么我们这代人要学会 “思维切换”?过去的时代,掌握一门技术、吃透一个领域,就能安稳过一生。但现在不一样了。知识不再稀缺,技术随处可查,信息随手可…...
【教程4>第12章>第8节】基于FPGA的图像缩放实现——图像横向压缩仿真测试以及MATLAB辅助验证
本课程学习成果预览 目录 1.软件版本 2.图像横向压缩testbench编写 3.仿真测试 4.程序操作视频 欢迎订阅FPGA/MATLAB/Simulink系列教程 《★教程1:matlab入门100例》 《★教程2:fpga入门100例》 《★教程3:simulink入门60例》 《★教程4:FPGA/MATLAB/Simulink联合开发入门与…...
2026届毕业生推荐的六大降重复率神器推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于人工智能产出内容越来越普遍的当前状况,文本里常常出现的模式化表达形态&…...
漏洞挖掘变现指南:合法渠道\+赏金技巧,新手也能月入过万
很多新手学习漏洞挖掘,不仅是为了提升技术,更是为了实现“技术变现”——通过提交漏洞获取赏金、兼职接单,这也是网络安全领域的核心福利之一。但变现的前提是“合法合规”,本文拆解漏洞挖掘的合法变现渠道、赏金提升技巧、避坑指…...
图书管理系统(增删改查,附源码,包含数据库交互以及图形化界面)
前言:本文旨在用面向对象的思想编程实现图书管理系统,功能包括增删改查,完整源码放在文末,大家有需自取,一共3个版本: 1.0版本:基础的Java单机程序2.0版本:提供了web图形化页面&…...
Qt Windows自定义GUI界面自动化测试——uiautomatio通过树节点属性定位控件
Qt Windows自定义GUI界面自动化测试 提示:点击链接跳转其他相关文章 Windows自定义GUI界面自动化测试框架选择 autoit uiautomatio基本使用 uiautomatio通过树节点属性定位控件 uiautomatio通过树节点属性定位控件Qt Windows自定义GUI界面自动化测试前言一、实现方式…...
