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

Vue.js 组件开发

Vue.js 是一个渐进式的JavaScript框架,主要用于构建用户界面。它采用了组件化的开发方式,使得前端开发更加高效、灵活且易于维护。组件是Vue.js的核心概念之一,理解和掌握组件的开发,有助于我们高效地构建现代Web应用。

本文将涵盖Vue.js的组件开发基础,提供实际操作案例,并通过丰富的示例来提升阅读趣味性,帮助读者迅速掌握Vue.js组件开发。

1. 什么是组件?

在Vue.js中,组件是具有独立功能的自定义元素。组件可以接收输入(props)并向外输出事件(event),类似于函数。通过组件化的方式,可以将复杂的界面拆解为简单的独立部分,从而使得代码更为清晰易读。

1.1 组件的优点

  • 可复用性:组件可以在多个地方复用,提高开发效率。
  • 可维护性:每个组件都是独立的,便于管理和维护。
  • 可测试性:独立的组件可以单独进行测试。
  • 易于协作:团队可以将不同的组件分配给不同的开发者,同时进行开发。

2. 环境搭建

在开始组件开发之前,我们需要搭建一个基础的Vue.js开发环境。我们将使用Vue CLI来快速创建我们的Vue应用项目。

2.1 安装 Node.js 和 Vue CLI

  1. 首先确保你的环境中安装了Node.js,可以通过终端运行以下命令来检查:

    node -v
    
  2. 接下来,安装Vue CLI:

    npm install -g @vue/cli
    

2.2 创建Vue项目

使用Vue CLI 创建新的Vue项目:

vue create vue-component-example

在项目创建过程中,选择默认设置或手动选择您需要的功能。项目创建完成后,进入项目目录:

cd vue-component-example

然后启动开发服务器:

npm run serve

访问 http://localhost:8080,您应该可以看到默认的 Vue.js 示例页面。

3. 创建第一个组件

在本节中,我们将创建一个简单的Vue组件,并在主应用中使用它。

3.1 组件目录结构

在 src/components 目录下创建一个名为 HelloWorld.vue 的文件。这个文件就是我们要创建的第一个组件。

<template><div class="hello"><h1>{{ message }}</h1><p>这是我的第一个组件!</p></div>
</template><script>
export default {name: 'HelloWorld',data() {return {message: 'Hello, Vue.js!',};},
};
</script><style scoped>
.hello {text-align: center;
}
</style>

3.2 在主应用中使用组件

在 src/App.vue 文件中引入并使用我们刚刚创建的 HelloWorld 组件。

<template><div id="app"><HelloWorld /></div>
</template><script>
import HelloWorld from './components/HelloWorld.vue';export default {name: 'App',components: {HelloWorld,},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

3.3 查看效果

在浏览器中刷新页面,你应该能够看到“Hello, Vue.js!”和相关的文字。

4. 组件的props

组件可以通过props接收来自父组件的数据。这有助于组件之间进行数据传递。

4.1 创建带有props的组件

我们修改之前的 HelloWorld.vue 组件,使其通过 props 接收一个消息。

在 HelloWorld.vue 中进行以下修改:

<template><div class="hello"><h1>{{ message }}</h1><p>这是我的第一个组件!</p></div>
</template><script>
export default {name: 'HelloWorld',props: {message: {type: String,required: true,},},
};
</script><style scoped>
.hello {text-align: center;
}
</style>

4.2 在父组件中传递props

然后,在 src/App.vue 中传递一个 message prop 给 HelloWorld 组件:

<template><div id="app"><HelloWorld message="欢迎来到Vue.js组件开发!" /></div>
</template><script>
import HelloWorld from './components/HelloWorld.vue';export default {name: 'App',components: {HelloWorld,},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

4.3 查看效果

再次刷新页面,现在应看到来自 props 的消息“欢迎来到Vue.js组件开发!”。

5. 组件的事件

组件可以通过 $emit 方法向父组件发送事件,这是组件间通信的重要方式。

5.1 创建一个按钮组件

我们将创建一个计数器组件,当用户点击按钮时,增加计数。

在 src/components 目录下创建一个名为 Counter.vue 的新组件:

<template><div><h2>当前计数: {{ count }}</h2><button @click="increment">增加</button></div>
</template><script>
export default {name: 'Counter',data() {return {count: 0,};},methods: {increment() {this.count += 1;this.$emit('count-updated', this.count);},},
};
</script><style scoped>
div {text-align: center;
}
button {padding: 10px 20px;font-size: 16px;
}
</style>

5.2 在父组件中接收事件

我们修改 src/App.vue 文件来接收来自 Counter 组件的事件,并在页面上显示当前计数。

<template><div id="app"><Counter @count-updated="updateCount" /><h2>外部计数: {{ externalCount }}</h2></div>
</template><script>
import Counter from './components/Counter.vue';export default {name: 'App',components: {Counter,},data() {return {externalCount: 0,};},methods: {updateCount(newCount) {this.externalCount = newCount;},},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

5.3 查看效果

刷新页面,您将看到一个按钮。如果单击它,外部计数将随着点击次数而增加。

6. 插槽(Slots)

插槽是Vue中实现组件内容分发的机制。可以使用插槽将父组件的内容传递给子组件。

6.1 创建带插槽的组件

创建一个新组件 Card.vue 以展示插槽的用法:

<template><div class="card"><h3>{{ title }}</h3><slot></slot></div>
</template><script>
export default {name: 'Card',props: {title: {type: String,required: true,},},
};
</script><style scoped>
.card {border: 1px solid #ccc;padding: 20px;margin: 10px;border-radius: 5px;
}
</style>

6.2 在父组件中使用插槽

将 Card 组件添加到 src/App.vue 中,利用插槽传递内容:

<template><div id="app"><Card title="第一个卡片"><p>这是第一张卡片的内容。</p></Card><Card title="第二个卡片"><p>这是第二张卡片的内容。</p></Card></div>
</template><script>
import Card from './components/Card.vue';export default {name: 'App',components: {Card,},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

6.3 查看效果

刷新页面,你会看到两个卡片,每个卡片都有不同的插槽内容。

7. 组件样式

Vue支持多种样式管理方式,包括内联样式、块样式、Scoped样式等,使得组件的样式独立且可管理。

7.1 Scoped样式

当你在组件中使用<style scoped>时,样式将仅适用于该组件,不会影响到其它组件。

7.2 组合和继承样式

可以使用CSS预处理器如Sass或Less(通过Vue CLI配置)来更好地管理样式。下面是一个简单的例子:

<style lang="scss" scoped>
.card {border: 1px solid #ccc;padding: 20px;margin: 10px;border-radius: 5px;& h3 {color: blue;}& p {color: gray;}
}
</style>

通过上述内容,我们深入了解了Vue.js组件的开发,包括组件的基本定义、prop、事件、插槽以及样式管理。组件是Vue.js的核心概念之一,灵活运用组件可以极大提高代码的可读性和维护性。

在实际开发中,组件可以结合Vue路由、状态管理(如Vuex)等,使得应用结构更加清晰。希望通过这篇操作指南,能够帮助读者更好地理解和应用Vue.js组件开发,构建出高效且优雅的Web应用。

相关文章:

Vue.js 组件开发

Vue.js 是一个渐进式的JavaScript框架&#xff0c;主要用于构建用户界面。它采用了组件化的开发方式&#xff0c;使得前端开发更加高效、灵活且易于维护。组件是Vue.js的核心概念之一&#xff0c;理解和掌握组件的开发&#xff0c;有助于我们高效地构建现代Web应用。 本文将涵…...

【Lcode 随笔】C语言版看了不后悔系列持续更新中。。。

文章目录 题目一&#xff1a;最长回文子串题目描述&#xff1a;示例输入与输出&#xff1a;题目分析&#xff1a;解题思路&#xff1a;示例代码&#xff1a;深入剖析&#xff1a; 题目二&#xff1a;合并K个有序链表题目描述&#xff1a;示例输入与输出&#xff1a;题目分析&am…...

排序--希尔排序

希尔排序介绍 希尔排序核心思想就是:1,分组;2,直接插入排序:越有序越快 希尔排序就是多次利用直接插入排序的一个排序算法. 希尔排序的算法思想:间隔式分组,利用直接插入排序让组内有序,然后缩小分组再次排序,直到组数为1希尔排序的理论基础就是直接插入排序越有序越快; 希尔排…...

【教程】57帧! Mac电脑流畅运行黑神话悟空

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 1、先安装CrossOver。网上有许多和谐版&#xff0c;可自行搜索。&#xff08;pd虚拟机里运行黑神话估计够呛的&#xff09; 2、运行CrossOver&#xf…...

『大模型笔记』Docker如何清理Build Cache!

Docker如何清理Build Cache! 文章目录 一. docker system df1. 镜像(Images)2. 容器(Containers)3. 本地卷(Local Volumes)4. 构建缓存(Build Cache)5. 总结二. 构建缓存(Build Cache)删除有什么影响1. 镜像构建速度变慢2. 磁盘空间被释放3. 不会影响已构建和运行的…...

如何使用 Python 读取数据量庞大的 excel 文件

使用 pandas.read_excel 读取大文件时&#xff0c;的确会遇到性能瓶颈&#xff0c;特别是对于10万行20列这种规模的 .xlsx 文件&#xff0c;常规的 pandas 方法可能会比较慢。 要提高读取速度&#xff0c;关键是找到更高效的方式处理 Excel 文件&#xff0c;特别是在 Python 的…...

c语言200例 067

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言200例 题目要求&#xff1a; 设计一个共用体类型&#xff0c;使其成员包含多种数据类型&#xff0c;根据不同的数据类型&#xff0c;输出不同的结果 要设计一个共用体&#xff08;union&#xff09;类型&…...

RabbitMQ的高级特性-死信队列

死信(dead message) 简单理解就是因为种种原因, ⽆法被消费的信息, 就是死信. 有死信, ⾃然就有死信队列. 当消息在⼀个队列中变成死信之后&#xff0c;它能被重新被发送到另⼀个交换器 中&#xff0c;这个交换器就是DLX( Dead Letter Exchange ), 绑定DLX的队列, 就称为死信队…...

Python 复制PDF中的页面

操作PDF文档时&#xff0c;复制其中的指定页面可以帮助我们从PDF文件中提取特定信息&#xff0c;如文本、图表或数据等&#xff0c;以便在其他文档中使用。复制PDF页面也可以实现在不同文件中提取页面&#xff0c;以创建一个新的综合文档。 本文将介绍如何使用Python 在同一文档…...

Sql Developer日期显示格式设置

默认时间格式显示 设置时间格式&#xff1a;工具->首选项->数据库->NLS->日期格式: DD-MON-RR 修改为: YYYY-MM-DD HH24:MI:SS 设置完格式显示&#xff1a;...

IP地址与智能家居能够碰撞出什么样的火花呢?

感应灯、远程遥控空调&#xff0c;自动感应窗帘——智能家居已经在正逐步走入我们的生活&#xff0c;为我们带来前所未有的便捷与舒适体验。而在这一进程中&#xff0c;IP地址又能够与智能家居碰撞出什么样的火花呢&#xff1f; 一、IP地址&#xff1a;智能家居的连接基石 智…...

人工智能技术在电磁场与微波技术专业的应用

在人工智能与计算电磁学的融合背景下&#xff0c;电磁学的研究和应用正在经历一场革命。计算电磁 学是研究电磁场和电磁波在不同介质中的传播、散射和辐射等问题的学科&#xff0c;它在通信、雷达、无 线能量传输等领域具有广泛的应用。随着人工智能技术的发展&#xff0c;这一…...

The First项目报告:探索Yield Guild Games运行机制与发展潜力

在探索数字娱乐与金融融合的全新疆域中&#xff0c;GameFi&#xff08;游戏化金融&#xff09;以其独特的魅力引领了一场前所未有的变革。这一创新概念&#xff0c;最初由MixMarvel的CSO Mary Ma在2019年底乌镇大会的远见卓识中首次提出&#xff0c;它将去中心化金融&#xff0…...

完成UI界面的绘制

绘制UI 接上文&#xff0c;在Order90Canvas下创建Image子物体&#xff0c;图片资源ui_fish_lv1&#xff0c;设置锚点&#xff08;CountdownPanelImg同理&#xff09;&#xff0c;命名为LvPanelImg,创建Text子物体&#xff0c;边框宽高各50&#xff0c; &#xff0c;重名为LvT…...

iot网关是什么?iot网关在工业领域的应用-天拓四方

一、IoT网关的定义 IoT网关&#xff0c;即物联网网关&#xff0c;是物联网&#xff08;IoT&#xff09;系统中的重要组成部分。它主要实现感知网络与通信网络&#xff0c;以及不同类型感知网络之间的协议转换&#xff0c;既能够支持广域互联&#xff0c;也能满足局域互联的需求…...

从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态

随着城市化进程的加速&#xff0c;城市感知系统作为智慧城市的重要组成部分&#xff0c;正逐步成为提升城市管理效率、保障公共安全、优化资源配置的关键手段。EasyCVR视频汇聚融合平台&#xff0c;凭借其强大的数据整合、智能分析与远程监控能力&#xff0c;在城市感知系统中扮…...

java socket bio 改造为 netty nio

公司早些时候接入一款健康监测设备&#xff0c;由于业务原因近日把端口暴露在公网后&#xff0c;每当被恶意连接时系统会创建大量线程&#xff0c;在排查问题是发现是使用了厂家提供的服务端demo代码&#xff0c;在代码中使用的是java 原生socket&#xff0c;在发现连接后使用独…...

进程、线程、协程详解:并发编程的三大武器

在现代计算机科学中,并发编程是一个核心概念,而进程、线程和协程是实现并发的三种主要方式。本文将深入探讨这三种概念,分析它们的特点、优缺点,以及适用场景。 1. 进程 (Process) 1.1 定义 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的…...

探索5 大 Node.js 功能

目录 单线程 Node.js 工作线程【Worker Threads】 Node.js 进程 进程缺点 工作线程 注意 集群进程模块【Cluster Process Module】 内部发生了什么&#xff1f; 为什么要使用集群 注意&#xff1a; 应用场景&#xff1a; 内置 HTTP/2 支持 这个 HTTP/2 是什么&…...

EZUIKit.js萤石云vue项目使用

EZUIKit.js 是萤石云&#xff08;Ezviz&#xff09;提供的一款用于Web端的视频播放和控制的JavaScript库。它允许开发者在网页上轻松集成视频监控、对讲、录像回放等功能&#xff0c;适用于安防监控、智能家居等场景。通过EZUIKit.js&#xff0c;你可以方便地访问萤石云平台上的…...

【Linux】磁盘分区挂载网络配置进程【更详细,带实操】

Linux全套讲解系列&#xff0c;参考视频-B站韩顺平&#xff0c;本文的讲解更为详细 目录 一、磁盘分区挂载 1、磁盘分区机制 2、增加磁盘应用实例 3、磁盘情况查询 4、磁盘实用指令 二、网络配置 1、NAT网络原理图 2、网络配置指令 3、网络配置实例 4、主机名和host…...

Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?

Java 选择 UTF-16 编码而不是更节省内存的 UTF-8 这一决定&#xff0c;涉及多个层面的设计权衡&#xff0c;包括历史原因、虚拟机&#xff08;JVM&#xff09;实现的复杂度、性能和字符处理的一致性。要理解这个问题&#xff0c;我们需要从 Java 语言的设计初衷、JVM 的工作机制…...

损失函数篇 | YOLOv10 引入 Inner-IoU 基于辅助边框的IoU损失

作者导读:Inter-IoU:基于辅助边框的IoU损失 论文地址:https://arxiv.org/abs/2311.02877 作者视频解读:https://www.bilibili.com 开源代码地址:https://github.com/malagoutou/Inner-IoU...

夹耳开放式耳机好用吗?一篇文章告诉你答案,附上挑选避坑小知识

夹耳开放式耳机作为音频领域的新兴产品&#xff0c;正逐渐走入大众视野。其独特的设计和功能引发了广泛关注与讨论。究竟夹耳开放式耳机好用吗&#xff1f;在这篇文章中&#xff0c;我们将从专业角度深入剖析他的各个方面。同时&#xff0c;还会为你提供详细的挑选避坑小知识&a…...

WebSocket 2024/9/30

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 与HTTP协议的区别 实现...

大数据开发--1.1大数据概论

目录 一.大数据的概念 什么是大数据&#xff1f; 二. 大数据的特点 三. 大数据应用场景 四. 大数据分析业务步骤 大数据分析的业务流程&#xff1a; 五.大数据职业规划 职业方向 岗位技术要求 六. 大数据学习路线 一.大数据的概念 什么是大数据&#xff1f; 数据 世界…...

Java | Leetcode Java题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> findAnagrams(String s, String p) {int sLen s.length(), pLen p.length();if (sLen < pLen) {return new ArrayList<Integer>();}List<Integer> ans new ArrayList<Int…...

springboot整合MybatisPlus+MySQL

上一篇&#xff1a;springboot整合sentinel和对feign熔断降级 文章目录 一、准备二、主要工作三、具体步骤3.1 准备数据库环境3.20 pre引入依赖3.2 引入依赖3.3 bootstrap.yml配置mybatisplus3.40 pre引入service、mapper3.4 引入实体类、service、mapper 四、测试目录结构 五…...

【MySQL】视图、用户和权限管理

目录 视图创建视图数据修改影响删除视图视图优点 用户和权限管理查看当前的数据库拥有用户信息创建用户修改密码删除用户权限授权回收权限 视图 视图就是相当于创建一个表&#xff0c;将查询到的结果集给存储起来。像使用复杂的多表查询查询到的结果集就不可以对结果集操作。而…...

Linux基础(五):linux文件种类与扩展名

1.文件种类 文件种类含义正规文件&#xff08; regular file &#xff09;就是一般我们在进行存取的类型的文件&#xff0c; 在由 ls -al 所显示出来的属性方面&#xff0c; 第一个字符为 [ - ]&#xff0c; 例如 [-rwxrwxrwx ]。 另外&#xff0c; 依照文件的内容&#xff0c…...

网站如何建立快捷方式/海淀区seo搜索引擎优化企业

本文翻译自&#xff1a;Android 8: Cleartext HTTP traffic not permittedI had reports from users with Android 8 that my app (that uses back-end feed) does not show content. 我收到来自Android 8用户的报告&#xff0c;称我的应用程序&#xff08;使用后端供稿&#x…...

吕梁网站建设/小果seo实战培训课程

实操过程 源数据库服务器&#xff08;192.168.1.101&#xff09;备份服务器(192.168.1.102)环境centos 7.4 mysql5.7 centos 7.4 数据库实例3306/安装备份工具Xtrabackup/安装网络限速工具 yum install pv #如果不做网络限速的话&#xff0c;可以不用安装 /ssh免密登陆 ssh…...

现在帮别人做网站赚钱不/免费seo技术教程

点击上方 “ 程序IT圈 ”&#xff0c;选择“置顶公众号”工作日每天早晨7点半准点推文打卡签到本文来源于公号&#xff1a;Java后端技术大家周末好&#xff01;每到周末&#xff0c;就想跟大家分享一些干货&#xff0c;知道大家周末都很有时间&#xff0c;所以今天想跟你推荐来…...

wordpress 浮层/安卓手机优化大师官方下载

传送门 神仙题啊……不看题解我可能一年都不一定做得出来……FlashHu大佬太强啦 到底是得有怎样的脑回路才能一眼看去就是费用流啊…… 建好图之后套个板子就好了&#xff0c;那么我们着重来讨论一下怎么建图 首先&#xff0c;对于每一个水管的支管&#xff0c;有且仅有一个其他…...

网页视频下载软件免费版/资源网站排名优化seo

给定两个整数 nnn 和 kkk&#xff0c;请你找到并输出能够整除 nnn 的第 kkk 小的正整数。 输入格式 一行&#xff0c;两个整数 nnn 和 kkk。 输出格式 输出能够整除 nnn 的第 kkk 小的整数。 如果不存在&#xff0c;则输出 −1−1−1。 数据范围 1≤n≤10151≤n≤10^{15}1≤…...

外链工具下载/谷歌关键词排名优化

1. 随机森林使用背景 1.1 随机森林定义 随机森林是一种比较新的机器学习模型。经典的机器学习模型是神经网络&#xff0c;有半个多世纪的历史了。神经网络预测精确&#xff0c;但是计算量很大。上世纪八十年代Breiman等人发明分类树的算法&#xff08;Breiman et al. 1984&…...