【Vue】自定义事件实现组件之间的通信(案例讲解)

news2024/11/15 19:45:06

一、前言

    这是部分哔哩哔哩上跟着一个博主【遇见狂神说】学习的,当然自己也是才开始学习的vue,在学到这个Vue的自定义事件的时候,虽然知识点很绕,但是在理解后又觉得很意思,觉得Vue真的很强大。这里博主将自己学习到的知识以博客的内容进行记录,采用大白话来描述吧,希望对大家有所帮助!

二、Vue的自定义事件

1、采用的语法:

this.$emit(自定义事件名,参数)

2、案例讲解

这里我们就通过一个点击事件的案例来理解如何实现组件之间的通信。

①:问题引出

这是一个源码,我们的案例会从这个源码讲起走

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<div id="app">
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
    </todo>
</div>
<!--导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
    Vue.component("todo",{
        template:
        '<div>\
         <slot name="todo-title"></slot>\
            <ul>\
            <slot name="todo-items"></slot>\
            </ul>\
         </div>'
    });
    Vue.component("todo-title",{
        props:['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props:['item','index'],
        //只能绑定当前组件的方法
        template: '<li>{{index}}---{{item}}<button @click="Remove">删除</button></li>',
        methods: {
            Remove:function (index) {
                this.$emit('remove',index);
            }
        }
    });
    var vm=new Vue({
        el:"#app",
        data:{
            title:"书籍列表",
            todoItems:['Java','C++','Php']
        }
    });
</script>
</body>
</html>

效果:

68daa4d4583b491ebb353508db79bdaf.png

    这个代码的意思是我们的这些数据都是通过todo-items组件显示的,但是我们的数据data在Vue对象里面,我们现在想要做的是,通过todo-items组件里面的点击事件,删除Vue对象中的数据,在这之前我们要知道组件里面的事件只能绑定当前组件的方法,所以要直接通过组件调用Vue对象中的方法,删除对应数组中的数据是行不通的,这时就需要使用我们的自定义事件了。

②:思路梳理

f7ed9f5ae4f244328e76f90ccfb101f1.png

   如图所示,Vue是有 双向绑定的特点的,Vue实例可以与前端进行绑定,而todo-items组件可以根据我们自定义事件与前端绑定,这样一来前端作为中间键,就可以将参数通过组件传递到Vue实例,这样一来就实现了组件间的通信。

③:代码实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<div id="app">
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in todoItems"
                    :item="item" :index="index" v-on:remove="RemoveItem(index)"></todo-items>
    </todo>
</div>
<!--导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
    Vue.component("todo",{
        template:
        '<div>\
         <slot name="todo-title"></slot>\
            <ul>\
            <slot name="todo-items"></slot>\
            </ul>\
         </div>'
    });
    Vue.component("todo-title",{
        props:['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props:['item','index'],
        //只能绑定当前组件的方法
        template: '<li>{{item}}<button @click="Remove">删除</button></li>',
        methods: {
            Remove:function (index) {
                this.$emit('remove',index);
            }
        }
    });
    var vm=new Vue({
        el:"#app",
        data:{
            title:"书籍列表",
            todoItems:['Java','C++','Php']
        },
        methods:{
            RemoveItem:function (index) {
                this.todoItems.splice(index,1);
            }
        }
    });
</script>
</body>
</html>

ps:这段代码中运用了之前讲解过的v-for、v-on、v-bind等事件,如果是小白阅读起来可能不是很容易,可以先看看博主之前的一些vue相关的基础知识,再来理解。

效果:

17b478ee774f42eca2b2fb9cd1a7ab88.png

点击“Java删除”后效果:

04e3e4435a5c4af6b0f7459810395a89.png

其它情况一次类推。

三、总结

   到此来个总结吧,我们都是知道Vue是组件化开发,像这样的自定义事件在组件中的通信肯定是会经常遇到的,到后期如果博主在做项目中遇到相同的情况,到时候会结合项目做相关案例。最后,如果这篇博客对屏幕前的小伙伴有所帮助,不要忘点赞、评论、收藏支持一波哦~

 

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

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

相关文章

车载电子电器架构 —— 功能安全开发(首篇)

车载电子电器架构 —— 功能安全开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

【后端】git与python的结合使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、git介绍二、git常见使用三、git与python的结合使用四、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发…

【3GPP】【核心网】【5G】5G核心网协议解析(四)(超详细)

1. 欢迎大家订阅和关注&#xff0c;精讲3GPP通信协议&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 目录 1. NGAP 按流程功能分类 1.1 接口管理过程 1.1.1 NG Setup 1.2.1 NAS消息传输过程 Transport of NAS Messa…

初入数据库

SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库的统一标准。 DDL&#xff08;Data Definition Language&#xff09;数据定义语言 数据库 show databases;create database db01;use db01;select database(); 显示当前使用的数据库drop d…

盲人导航手机:科技之光点亮无碍出行新纪元

作为一名资深记者&#xff0c;我有幸见证了科技如何跨越障碍&#xff0c;赋予特殊群体更为自由、便捷的生活方式。今天&#xff0c;我想向您详细介绍一款专为盲人群体设计的导航应用&#xff0c;蝙蝠避障&#xff0c;它以盲人导航手机这一创新概念&#xff0c;让视障人士在出行…

03-JAVA设计模式-访问者模式

访问者模式 什么是访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是软件设计模式中的一种行为模式&#xff0c;它用于将数据结构中的元素与操作这些元素的操作解耦。这种模式使得可以在不修改数据结构的情况下添加新的操作。 在访问者模式中&#xff0c;我们…

【FPGA】优化设计指南(二):性能指标

目录 设计可运行的最高频率输入到输出的时钟周期数资源利用率和功耗 设计可运行的最高频率 Fmax可通过时序报告计算得出。在Vivado中&#xff0c;可通过命令report_timing_summary生成时序报告.WNS越大越好. 输入到输出的时钟周期数 输入到输出的延迟通常用时钟周期个数来表…

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果&#xff0c;这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…

STM32 串口打印乱码(Cubemx)

STM32 串口打印乱码&#xff08;Cubemx&#xff09; 时钟配置错误&#xff0c;CubeMX默认的外部晶振是25MHz&#xff0c;而板载的晶振为8MHzSTM32F407修改程序将外部25M晶振修改为8M&#xff08;标准库、HAL库&#xff09; 核心问题 芯片型号与晶振配置&#xff1a;使用的ST…

动态规划---斐波那契数列模型

目录 一、斐波那契数列的基本概念 二、动态规划在斐波那契数列中的应用与优势 三、实际案例&#xff1a;使用动态规划解决斐波那契数列问题 四、动态规划问题的做题步骤 五、例题 1、第N个泰波那契数---点击跳转题目 2、三步问题----点击跳转题目 3、最小花费爬楼梯---…

kafka启动报错(kafka.common.InconsistentClusterIdException)

文章目录 前言kafka启动报错(kafka.common.InconsistentClusterIdException)1. 查找日志2. 定位问题/解决 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不…

JVM支持的可配置参数查看和分类

JVM参数大致可以分为三类: 标注指令:-开头。 这些是所有的HotSpot都支持的参数。可以用java-help 打印出来。 非标准指令: -X开头。 这些指令通常是跟特定的HotSpot版本对应的。可以用java -X打印出来。 不稳定参数: -XX 开头。 这一类参数是跟特定HotSpot版本对应的&#x…

sql题目练习

cookie注入 解题思路和之前的整数型注入一样&#xff0c;只是比整数型注入多了一步&#xff0c;题目没有给输入框&#xff0c;提示“尝试找找cookie吧”cookie的中文翻译是曲奇&#xff0c;小甜饼的意思。cookie其实就是一些数据信息&#xff0c;类型为“小型文本文件”&#…

9、案例实战【处理百万级交易无压力】:JVM栈内存与永久代大小又该如何设置?

9.1、前文回顾 上一篇文章通过案例分析,向大家介绍了在准备上线新系统时,如何根据预估的业务量和访问量来推算系统每秒的并发量。接下来,我们将探讨如何根据这个并发量来估算每秒钟请求对内存空间的占用,进而得出整个系统运行期间的JVM内存运转模型。 在得到这个JVM内存运…

如何部署 wfs 分布式服务

说明&#xff1a; wfs是海量小文件存储系统。wfs1.x不直接支持分布式存储&#xff0c;但为了应对大规模部署和高可用需求&#xff0c;推荐采用如Nginx这样的负载均衡服务&#xff0c;通过合理的资源配置和定位策略&#xff0c;可以在逻辑上模拟出类似分布式的效果。也就是说&am…

浅谈免杀下的持久化

文章目录 前记注册表计划任务COM劫持后记reference 前记 实战中持久化的手段常用的就是加服务、添改注册表、加计划任务、劫持等&#xff0c;这里探索c/c下的维权免杀 注册表 用户级 \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run \HKEY_CURRENT_USER…

POJO,Entity,model,domain,view,DTO,VO,Param这些分别都是什么含义?怎样理解?

目录 1. 前言 2. POJO的含义 3. entity(实体) 4. model(模型) 5. domain(域) 6. view(视图) 7. DTO(数据传输对象) 8. VO(真正视图层) 9. Param(参数) 10. 总结 1. 前言 在日常开发的过程中&#xff0c;如果我们接手一个新的项目之后&#xff0c;通常会有各种各样的…

Java基础之JVM对象内存分配机制简介

一 对象内存分配 1.1 运行时数据区域 1.2 常见java应用启动JVM参数&#xff1a; -Xss&#xff1a;每个线程的栈大小(单位kb)-Xms&#xff1a;堆的初始大小&#xff0c;默认物理内存的1/64,示例&#xff1a;-Xms:4g -Xms:10m-Xmx&#xff1a;堆的最大可用大小&#xff0c;默认物…

vue cli3开发自己的插件发布到npm

具体流程如下&#xff1a; 1、创建一个vue项目 vue create project 2、编写组件 &#xff08;1&#xff09;新建一个plugins文件夹&#xff08;可自行创建&#xff09; &#xff08;2&#xff09;新建Button组件 &#xff08;3&#xff09;组件挂载&#xff0c;为组件提供 in…

Opencv | 边缘检测 轮廓信息

目录 一. 边缘检测1. 边缘的定义2. Sobel算子 边缘提取3. Scharr算子 边缘提取4. Laplacian算子 边缘提取5. Canny 边缘检测算法5.1 计算梯度的强度及方向5.2 非极大值抑制5.3 双阈值检测5.4 抑制孤立弱边缘 二. 轮廓信息1. 获取轮廓信息2. 画轮廓 一. 边缘检测 1. 边缘的定义…