vue2技能树(9)-prop属性,自定义事件

目录

  • Vue 2 中的 Prop 详解
    • 基本用法
      • 项目示例
    • 动态Props
      • 项目示例
    • Prop 验证
      • 项目示例
    • 单向数据流
      • 项目示例
  • Vue 2 自定义事件详解
    • 自定义事件的基本使用
      • 项目示例
    • 传递数据
      • 项目示例
    • 命名自定义事件
      • 项目示例


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


Vue 2 中的 Prop 详解

在Vue.js 2中,Props(属性) 是一种允许父组件向子组件传递数据的机制,它是Vue组件之间通信的重要方式之一。以下是对Vue 2中Props的多方面详细介绍,包括使用详细的项目示例。

基本用法

在Vue组件中,通过在子组件的模板中声明props 来定义接受的属性,然后可以在父组件中通过自定义属性的方式将数据传递给子组件。

项目示例

假设你有一个UserCard 子组件,用于显示用户的名字。

<div id="app"><user-card username="John Doe"></user-card>
</div>
Vue.component('UserCard', {props: ['username'], // 声明propstemplate: `<div>{{ username }}</div>`
});new Vue({el: '#app'
});

在这个示例中,UserCard 子组件通过props: ['username'] 声明了一个名为username 的属性。然后,父组件可以通过username 自定义属性将数据传递给子组件。

动态Props

你可以使用动态的数据来传递props,这样子组件可以接受来自父组件的动态数据。

项目示例

假设你有一个父组件,通过v-bind 动态地将数据传递给子组件。

<div id="app"><user-card :username="dynamicUsername"></user-card>
</div>
Vue.component('UserCard', {props: ['username'],template: `<div>{{ username }}</div>`
});new Vue({el: '#app',data: {dynamicUsername: 'Jane Smith'}
});

在这个示例中,父组件通过:username="dynamicUsername" 动态地将dynamicUsername 数据传递给子组件。

Prop 验证

Vue 2还支持对props 进行验证,确保传递给子组件的数据符合预期。

项目示例

假设你有一个Post 子组件,接受一个title 属性,并希望确保它是字符串类型。

<div id="app"><post :title="123"></post>
</div>
Vue.component('Post', {props: {title: {type: String, // 类型验证required: true // 必需属性}},template: `<div>{{ title }}</div>`
});new Vue({el: '#app'
});

在这个示例中,Post 子组件通过props 的验证选项确保title 是一个必需的字符串类型属性。如果传递的数据不符合验证规则,Vue会在控制台中发出警告。

单向数据流

在Vue中,props 遵循单向数据流的原则,父组件传递数据给子组件后,子组件不应该修改这些数据。如果需要从子组件向父组件传递数据,你应该使用自定义事件。

项目示例

假设你有一个Counter 子组件,用于显示计数器值,但不允许子组件直接修改父组件传递的计数值。

<div id="app"><counter :count="count" @increment="incrementCount"></counter>
</div>
Vue.component('Counter', {props: ['count'],template: `<div><button @click="increment">+1</button><span>计数:{{ count }}</span></div>`,methods: {increment() {this.$emit('increment'); // 触发自定义事件}}
});new Vue({el: '#app',data: {count: 0},methods: {incrementCount() {this.count++;}}
});

在这个示例中,Counter 子组件通过$emit 触发increment 自定义事件,来请求父组件增加计数值。这遵循了单向数据流的原则。

Props 是Vue.js中一个非常重要的概念,用于在组件之间传递数据。你可以通过定义props来声明子组件所需的数据,实现组件之间的通信。 Props 的动态绑定和验证功能使得数据传递更加灵活和可靠。但记住,遵循单向数据流的原则,确保props只用于父到子的数据传递。

Vue 2 自定义事件详解

自定义事件是Vue.js 2中的一个关键概念,它允许你在组件之间进行通信,使得父组件和子组件能够互相传递数据和触发行为。以下是对Vue 2中自定义事件的多方面详细介绍,包括使用详细的项目示例。

自定义事件的基本使用

在Vue组件中,你可以使用$emit 方法来触发自定义事件,并在父组件中通过v-on 来监听和处理这些事件。

项目示例

假设你有一个Button 子组件,点击按钮后触发自定义事件,父组件监听并处理这个事件。

<div id="app"><button @custom-click="handleCustomClick">点击我</button>
</div>
Vue.component('Button', {template: `<button @click="emitCustomClick">点击我</button>`,methods: {emitCustomClick() {this.$emit('custom-click'); // 触发自定义事件}}
});new Vue({el: '#app',methods: {handleCustomClick() {alert('自定义事件被触发了!');}}
});

在这个示例中,Button 子组件使用this.$emit('custom-click') 来触发custom-click 自定义事件,父组件使用@custom-click 来监听并处理这个事件。

传递数据

自定义事件不仅可以触发行为,还可以传递数据给父组件。你可以在$emit 方法的第二个参数中传递数据。

项目示例

假设你有一个Counter 子组件,点击按钮后触发自定义事件,传递计数值给父组件。

<div id="app"><counter @custom-increment="handleCustomIncrement"></counter><p>计数:{{ count }}</p>
</div>
Vue.component('Counter', {data() {return {count: 0};},template: `<div><button @click="increment">+1</button></div>`,methods: {increment() {this.count++;this.$emit('custom-increment', this.count); // 传递计数值}}
});new Vue({el: '#app',data: {count: 0},methods: {handleCustomIncrement(count) {alert(`计数增加到 ${count}`);this.count = count;}}
});

在这个示例中,Counter 子组件通过this.$emit('custom-increment', this.count) 来触发custom-increment 自定义事件,并传递计数值给父组件。

命名自定义事件

除了直接使用字符串作为事件名,你还可以使用命名自定义事件来更好地组织和管理事件。

项目示例

假设你有一个Product 子组件,点击按钮后触发一个命名自定义事件。

<div id="app"><product @add-to-cart="handleAddToCart"></product><p>购物车中有 {{ cartItems }} 件商品</p>
</div>
Vue.component('Product', {template: `<button @click="addToCart">添加到购物车</button>`,methods: {addToCart() {this.$emit('add-to-cart'); // 触发命名自定义事件}}
});new Vue({el: '#app',data: {cartItems: 0},methods: {handleAddToCart() {this.cartItems++;}}
});

在这个示例中,Product 子组件使用this.$emit('add-to-cart') 来触发add-to-cart 命名自定义事件。

自定义事件是Vue.js中非常强大的功能,它使得组件之间可以互相传递数据和触发行为,使得组件更具交互性和可重用性。无论是基本的自定义事件、传递数据还是命名自定义事件,都可以满足不同的需求,帮助你构建丰富的交互式应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java如何实现单点登录(SSO):基于JWT和Redis的实例详解

前言 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种身份验证和访问控制机制&#xff0c;允许用户使用一组凭证&#xff08;如登录名和密码&#xff09;登录到多个应用程序中&#xff0c;而无需为每个应用程序单独进行身份验证。用户只需要登录一次…

c语言进制的转换10进制转换16进制

c语言进制的转换10进制转换16进制 c语言的进制的转换 c语言进制的转换10进制转换16进制一、16进制的介绍二、10进制转换16进制的方法 一、16进制的介绍 十六进制&#xff1a; 十六进制逢十六进一&#xff0c;所有的数组是0到9和A到F组成&#xff0c;其中A代表10&#xff0c;B代…

简化通知基础设施:开源的消息通知服务 | 开源专题 No.41

novuhq/novu Stars: 22.9k License: MIT Novu 是一个开源的通知基础设施项目&#xff0c;它提供了统一的 API 来通过多个渠道发送通知&#xff0c;包括应用内、推送、电子邮件、短信和聊天。主要功能有&#xff1a; 为所有消息提供商 (应用内、电子邮件、短信、推送和聊天) 提…

Spring Boot和XXL-Job:高效定时任务管理

Spring Boot和XXL-Job&#xff1a;高效定时任务管理 前言第一&#xff1a;XXL-Job简介什么是XXL-job对比别的任务调度 第二&#xff1a; springboot整合XXL-job配置XXL-Job Admin拉取XXL-Job代码修改拉取的配置 配置执行器自己的项目如何整合maven依赖properties文件配置执行器…

mysql基础、索引及sql优化

mysql数据库 数据库基础知识 为什么要使用数据库 数据存内存&#xff1b;优点&#xff1a;存取速度快。缺点&#xff1a;数据不能永久保存 数据存文件。优点&#xff1a;数据永久存储。缺点&#xff1a;速度比内存操作慢&#xff0c;频繁i…

使用jdbc技术连接数据库

连接数据库 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version><scope>compile</scope></dependency> </dependencies> g…

教师必备宝藏,强烈推荐

亲爱的教师朋友们&#xff0c;你们是不是在为学期末成绩查询而头疼呢&#xff1f;一学期下来&#xff0c;成堆的试卷和成绩单&#xff0c;还有学生家长的各种咨询&#xff0c;让人应接不暇。现在&#xff0c;我给你们分享一个教师必备的宝藏&#xff0c;让你们的成绩查询工作变…

AtCoder ABC 138

C - Alchemist 排序贪心&#xff0c;小的应该先除&#xff0c;大的后除 D - Ki 搜索 pypy不出意外的挂了 // atcoder.cpp : // #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <map> #include <set> #include <cstring> #include <…

games101作业七,计算机图形学作业三,详细知识点总结(附代码)

计算机图形学课程作业总结&#xff0c;同课程慎重Ctrl C/V 文章目录 1. 光线追踪算法光线追踪的准备工作Mller-Trumbore算法rayTriangleIntersect()函数 2. 光线追踪包围盒加速算法1. AABB 包围盒又称 轴对齐包围盒2. 光线与包围盒&#xff08;AABB&#xff09;的相交检测算法3…

从JVM方面解释java传递问题

前言&#xff1a; Java传递问题&#xff0c;网上解释的比较多&#xff0c;大多是从代码和传递的规范的层次来解释。前段时间&#xff0c;自己也一直在思考这个问题&#xff0c;大部分的解释让我很难印象深刻&#xff0c;经常忘&#xff0c;刚好看过一点jvm方面的书&#xff0c…

对GRUB和initramfs的小探究

竞赛时对操作系统启动过程产生了些疑问&#xff0c;于是问题导向地浅浅探究了下GRUB和initramfs相关机制&#xff0c;相关笔记先放在这里了。 内核启动流程 在传统的BIOS系统中&#xff0c;计算机具体的启动流程如下&#xff1a; 电源启动&#xff1a;当计算机的电源打开时&…

『heqingchun-Qt的艺术-优雅界面设计开发』

Qt的艺术-优雅界面设计开发 效果图 一、新建Qt窗口工程 二、准备资源文件 1.图标资源 链接: 图标资源 2.Qss资源 链接: Qss资源 三、设计开发 项目源码链接: CSDN资源

JS中面向对象的程序设计

面向对象&#xff08;Object-Oriented&#xff0c;OO&#xff09;的语言有一个标志&#xff0c;那就是它们都有类的概念&#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念&#xff0c;因此它的对象也与基于类的语言中的对象有所不…

基于大数据的社交平台数据爬虫舆情分析可视化系统 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据…

串口调试时,数据丢失或不完整,不等长,校验位不对的原因分析

首先&#xff0c;先排除硬件上的问题&#xff0c;使用示波器检测引脚电压是否正常&#xff1f;波形收发是否正常&#xff1f;多用几块板子进行对比测试。如果硬件没有问题&#xff0c;则进行软件上的排除。 在硬件测试无问题基础上&#xff0c;单片机与某功能模块进行串口通信…

Go语言入门心法(十五):Go微服务实战

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

Redis主从模式(二)---拓扑结构及复制过程

目录 一, Redis主从模式下的复制拓扑结构 1.1 一主一从结构 1.2 一主多从结构 1.3 树形主从结构 二, 主从复制过程 2.1 主从复制建立复制流程图 2.2 数据同步(psyc) 1.replicationid/replid (复制id) 2.offset(偏移量) 2.3 psync运行流程 2.4 全量复制 2.5 部分复制…

操作教程|如何注册成为Moonbeam社区代表参与治理

社区代表是高度参与社区治理的社区成员&#xff0c;其主要职责是将社区成员委托给他们的投票权参与社区投票&#xff0c;并确保链上治理稳健发展和活跃参与度。本文将向您展示如何快速注册成为社区代表。 首先&#xff0c;前往Moonbeam委托网站&#xff0c;点击网页右上角的“…

老师们都在用的办公好物

现在还有老师不知道班级查询系统吗?各位老师们&#xff0c;向大家推荐一款超级实用的班级查询系统&#xff0c;帮你轻松管理学生信息&#xff0c;省去繁琐的手动操作&#xff0c;还能让学生们自主查询&#xff0c;简直是老师的福音&#xff01; 如果你在编程方面感到有些吃力&…

【vue3】依赖注 provide、inject(父组件与儿子、孙子、曾孙子组件之间的传值)

一、基本用法&#xff1a; //父组件 import { ref, provide } from vue const radio ref<string>(red) provide(myColor,radio) //注入依赖//儿子组件、孙子组件、曾孙子组件 import { inject } from vue import type { Ref } from vue; const myColor inject<Ref&l…