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

vue中的侦听器和组件之间的通信

目录

一、侦听器

监听基本数据类型:

监听引用数据类型:

计算属性和watch区别?

二、组件通信/传值方式

1.父子组件传值

    父组件给子组件传值:

      (1)props

      (2)provide inject

      (3)事件总线 $emit 和 $on vue实例调用方法 

    子组件给父组件传值:

    (1)事件总线 $emit 和 $on vue实例调用方法 

  2.兄弟组件传值/通信

    (1)利用事件总线 

    (2)vuex  

  3.祖先后代组件传值/通信

      (1)provide inject


一、侦听器

只有监听数据发生改变才会触发侦听器 

监听基本数据类型:

通过下面这个小案例来学习,通过监听a和b的值,来实现计算求和的功能

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>
<body><div id="app"><!-- number修饰符 可以让双向数据绑定的值变为number类型 -->a:<input type="text" v-model.number="a"><br>+<br>b:<input type="text" v-model.number="b"><br>=<br><output>{{total}}</output></div><script>let vm = new Vue({// 与模板绑定el:"#app",// 数据模型 存放vue变量data:{a:0,b:0,total:0,name:"",obj:{}},// 存放方法和事件处理程序methods: {},computed:{// total(){//     return Number(this.a) + Number(this.b)// }},// 侦听器 监听器  什么时候触发? 只有数据发生变化才会触发watch:{a(newValue,oldValue){// console.log(newValue,oldValue);this.total = newValue + this.b},b(newValue,oldValue){// console.log(newValue,oldValue);this.total = this.a + newValue}}});</script>
</body>
</html>

浏览器运行结果如下:

 


监听引用数据类型:

当侦听器在监听引用数据类型时存在监听不到的问题,这时我们就需要开启深度监听

params:{handler(n,o){this.getArticle();},//开启深度监听deep:true}}

计算属性和watch区别?

  1.计算属性有缓存性,响应式依赖不发生改变,多次调用计算属性会返回之前得计算结果。
  2.watch无缓存性,只有数据发生改变侦听器才会执行。
  3.watch侦听器一般用于异步操作或者开销较大得操作。
  4.计算属性默认可读,设置setter就可修改。

二、组件通信/传值方式

1.父子组件传值
    父组件给子组件传值:
      (1)props

      1.在子组件标签中写入父组件传递数据 向下传递prop
      2.在子组件内声明props选项接收父组件传递的数据 props:['','','']

    <!-- 动态传递 传递的变量 使用v-bind绑定 --><Header :msg="msg"></Header><!-- 静态传递 --><Header title="我是父组件中title"></Header><!-- 3.传递其他数据类型 除字符串外 传递数组对象number布尔值 动态传参 --><Header :arr="[1,2,3,4]" :obj="{name:'zhangsan'}" :bool="true" :age="20"></Header>
    // 子组件使用props接收父组件传递的数据props:['msg'],props:['title'],props: ['msg', 'age', 'bool', 'arr', 'obj'],

      (2)provide inject

      1.父组件使用provide提供传递数据或者方法(与methods同级)
      2.子组件使用inject注入传递的数据或者方法

  // 注入传递给后代组件的数据或者方法provide(){return{parent:this.parent,parentSend:this.parentSend,attr:this.attr}}
}
    // 使用provide传递的数据方法使用inject注入  后代组件注入祖先组件传递数据和方法inject: ['parent', 'parentSend'],

      (3)事件总线 $emit 和 $on vue实例调用方法 

      1.新建event.js 
        import Vue from 'vue';
        export default new Vue();

// 定义事件总线 导出vue实例对象
import Vue from "vue";
export default new Vue();


      2.在父组件中使用$emit发射自定义事件同时传递参数
      import Bus from './event.js'
      Bus.$emit('自定义事件名称',传递数据)

    <!-- 3.第三种传值方式 --><button @click="handler">发射数据给header子组件</button>
    handler(){// $emit() 发射自定义事件 参数(自定义事件名称 传递的参数)Bus.$emit('toHeader',this.pMsg,'hello world')},


      3.在子组件内部使用$on监听自定义事件同时接收参数
      Bus.$on('自定义事件名称',(a,b)=>{

      })

        // $on监听$emit自定义事件 参数(自定义事件名称,()=>{})Bus.$on('toHeader', (a, b) => {console.log(a, b);this.a = a;this.b = b;})

    子组件给父组件传值:
    (1)事件总线 $emit 和 $on vue实例调用方法 

      1.发射自定义事件给父组件同时传递数据
      this.$emit('toParent',this.footer);
      2.在父组件模板中(在子组件标签上)声明自定义事件 
      <Footer @toParent='事件处理程序'></Footer>
      事件处理程序(接收子组件传递的数据){

      }

        和父给子传的第三种方式一样

  2.兄弟组件传值/通信
    (1)利用事件总线 

    1.定义事件总线 新建xxx.js
        import Vue from 'vue';
        export default new Vue();
    2.在一个兄弟组件中引入事件总线 
      import Bus from './event.js'
      使用Bus.$emit('自定义事件名称',传递的数据)
    3.在另一个兄弟组件中引入事件总线
      import Bus from './event.js'
      使用Bus.$on('emit发射自定义事件名称',(a,b)=>{
        
      })监听发射自定义事件 同时接收数据

        同父给子传的第三种方式


    (2)vuex  

        关于vuex后续文章会详细说明,父子组件、兄弟组件、无关系组件任意组件之间的传值。

        Vuex本质上也是一种本地存储,比localStorage的单纯值传递多了方法、属性、异步方法等功能。但是因为是将内容本地化,所以就会被在浏览器中获取到。

  3.祖先后代组件传值/通信
      (1)provide inject

        同父给子传的第二种方式

相关文章:

vue中的侦听器和组件之间的通信

目录 一、侦听器 监听基本数据类型&#xff1a; 监听引用数据类型&#xff1a; 计算属性和watch区别&#xff1f; 二、组件通信/传值方式 1.父子组件传值 父组件给子组件传值&#xff1a; &#xff08;1&#xff09;props &#xff08;2&#xff09;provide inject &…...

maven-shade-plugin有什么用

maven-shade-plugin 是 Maven 的一个插件&#xff0c;用于创建可执行的 JAR 文件&#xff0c;并且可以将所有依赖项打包到一个 JAR 文件中。 该插件的主要用途是创建包含所有依赖项的“fat” JAR&#xff08;也称为“uber” JAR&#xff09;&#xff0c;使得应用程序可以作为一…...

本地部署 OpenVoice

本地部署 OpenVoice OpenVoice 介绍Qwen-Audio Github 地址部署 OpenVoice克隆代码库创建虚拟环境使用 pip 安装 pytorch使用 pip 安装依赖下载 checkpoint运行 Web UI OpenVoice 介绍 通过 MyShell 进行即时语音克隆。 Qwen-Audio Github 地址 https://github.com/myshell-…...

【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《模式之谜 | 数据奇迹解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1 初识模式识…...

大模型赋能“AI+电商”,景联文科技提供高质量电商场景数据

据新闻报道&#xff0c;阿里巴巴旗下淘天集团和国际数字商业集团都已建立完整的AI团队。 淘天集团已经推出模特图智能生成、官方客服机器人、万相台无界版等AI工具&#xff0c;训练出了自己的大模型产品 “星辰”&#xff1b; 阿里国际商业集团已成立AI Business&#xff0c;…...

深度比较(lodash 的 isEqual 方法)

_.isEqual() 是 Lodash 提供的一个函数&#xff0c;用于比较两个值是否相等。它会递归地比较两个对象的属性和值&#xff0c;以判断它们是否相等。 这个函数的作用是&#xff1a; 深度比较对象&#xff1a;递归比较两个对象的每一个属性和嵌套对象的属性&#xff0c;判断它们…...

Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

目录 一、ansible概述 1、简介 2、Ansible主要功能&#xff1a; 3、Ansible的另一个特点&#xff1a;所有模块都是幂等性 4、Ansible的优点&#xff1a; 5、Ansible的四大组件&#xff1a; 二、ansible环境部署&#xff1a; 1、环境&#xff1a; 2、安装ansible&#…...

QT中网络编程之发送Http协议的Get和Post请求

文章目录 HTTP协议GET请求POST请求QT中对HTTP协议的处理1.QNetworkAccessManager2.QNetworkRequest3.QNetworkReply QT实现GET请求和POST请求Get请求步骤Post请求步骤 测试结果 使用QT的开发产品最终作为一个客户端来使用&#xff0c;很大的一个功能就是要和后端服务器进行交互…...

Java 并发编程 —— Fork/Join 框架的原理详解

目录 一. 前言 二. 并发和并行 2.1. 并发 2.2. 并行 2.3. 分治法 三. ForkJoin 并行处理框架的理论 3.1. ForkJoin 框架概述 3.2. ForkJoin 框架原理 3.3. 工作窃取算法 四. ForkJoin 并行处理框架的实现 4.1. ForkJoinPool 类 4.2. ForkJoinWorkerThread 类 4.3.…...

3-10岁孩子语文能力培养里程碑

文章目录 基础能力3岁4岁5岁6-7岁&#xff08;1-2年级&#xff09;8-9岁&#xff08;3-4年级&#xff09;10岁&#xff08;5年级&#xff09; 阅读推荐&父母执行3岁4-5岁6-7岁&#xff08;1-2年级&#xff09;8-9岁&#xff08;3-4年级&#xff09;10岁&#xff08;5年级&a…...

Vue+ElementUi 基于Tree实现动态节点添加,节点自定义为输入框列

VueElementUi 基于Tree实现动态节点手动添加&#xff0c;节点自定义为输入框列 代码 <el-steps :active"active" finish-status"success" align-center><el-step title"test1"/><el-step title"test2"/><el-st…...

Web前端-JavaScript(js数组和函数)

文章目录 1.数组1.1 数组的概念1.2 创建数组1.3 获取数组中的元素1.4 数组中新增元素1.5 遍历数组 2.函数2.1 函数的概念2.2 函数的使用函数声明调用函数函数的封装 2.3 函数的参数函数参数语法函数形参和实参数量不匹配时 2.4 函数的返回值2.4.1 案例练习 2.5 arguments的使用…...

判断数据是否为整数--函数设计与实现

#定义函数&#xff1a;is_num(s),判断输入的数据是否整数。 #(1)判断是否是数字 def is_num(s):if s.isdigit(): #isdigit()是一个字符串方法&#xff0c;用于检查字符串是否只包含数字字符。如果字符串只包含数字字符&#xff0c;则返回True&#xff1b;否则返回Falsereturn T…...

netty源码:(29)ChannelInboundHandlerAdapter

它实现的方法都有一个ChannelHandlerContext参数&#xff0c;它的方法都是直接调用ChannelHandlerContext参数对应的方法&#xff0c;该方法会调用下一个handler对应的方法。 可以继承这个类&#xff0c;重写感兴趣的方法,比如channelRead. 这个类有个子类&#xff1a;SimpleC…...

Shell脚本应用(二)

一、条件测试操作 Shell环境根据命令执行后的返回状态值〈$?&#xff09;来判断是否执行成功&#xff0c;当返回值为О时表示成功.否则〈非О值)表示失败或异常。使用专门的测试工具---test命令&#xff0c;可以对特定条件进行测试&#xff0e;并根据返回值来判断条件是否成立…...

Kafka基本原理及使用

目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic&#xff08;主题&#xff09;&#xff1a; 2. Partition&#xff08;分区&#xff09;&#xff1a; 3. Producer&#xff08;生产者&#xff09;&#xff1a; 4. Consumer&#xff08;…...

使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析

文章目录 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》&#xff0c;对分布…...

前后端分离下的鸿鹄电子招投标系统:使用Spring Boot、Mybatis、Redis和Layui实现源码与立项流程

在数字化时代&#xff0c;采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…...

ChatGPT 有什么新奇的使用方式?

来看看 OpenAI 内部是如何使用 ChatGPT 的。 目前&#xff08;4月29日&#xff09;距离ChatGPT发布了已经半年&#xff0c;这期间大家基本上把能想到的ChatGPT的使用方法都研究遍了——从写作、写代码&#xff0c;到翻译、英语润色&#xff0c;再到角色扮演等等。 所以&#x…...

【计算机四级(网络工程师)笔记】操作系统概论

目录 一、OS的概念 1.1OS的定义 1.2OS的特征 1.2.1并发性 1.2.2共享性 1.2.3随机性 1.3研究OS的观点 1.3.1软件的观点 1.3.2资源管理器的观点 1.3.3进程的观点 1.3.4虚拟机的观点 1.3.5服务提供者的观点 二、OS的分类 2.1批处理操作系统 2.2分时操作系统 2.3实时操作系统 2.4嵌…...

LeetCode算法练习top100:(10)贪心算法

package top100.贪心算法;import java.util.ArrayList; import java.util.List;public class TOP {//121. 买卖股票的最佳时机public int maxProfit(int[] prices) {int res 0, min prices[0];for (int i 1; i < prices.length; i) {if (prices[i] < min) {min price…...

随记-探究 OpenApi 的加密方式

open api 主要参数如下 appKey 接口Key&#xff08;app id&#xff09;appSecret 接口密钥timeStamp 时间戳 毫秒nonceStr 随机字符串signature 加密字符串 客户端 使用 appSecret 按照一定规则将 appKey timeStamp nonceStr 进行加密&#xff0c;得到密文 signature将 appK…...

stm32学习总结:4、Proteus8+STM32CubeMX+MDK仿真串口收发

stm32学习总结&#xff1a;4、Proteus8STM32CubeMXMDK仿真串口收发 文章目录 stm32学习总结&#xff1a;4、Proteus8STM32CubeMXMDK仿真串口收发一、前言二、资料收集三、STM32CubeMX配置串口1、配置开启USART12、设置usart中断优先级3、配置外设独立生成.c和.h 四、MDK串口收发…...

配置paddleocr及paddlepaddle解决报错 GLIBCXX_3.4.30 FreeTypeFont

配置 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/StyleText/README_ch.md#style-text 环境配置 https://www.paddlepaddle.org.cn/ 根据自己的cuda版本选择paddlepaddle-gpu # 新建conda环境 # python version conda create -n paddle python3.8 # 安装p…...

【实战】如何在Docker Image中轻松运行MySQL

定义 使用Docker运行MySQL有许多优势。它允许数据库程序和数据分离&#xff0c;增强了数据的安全性和可靠性。Docker Image的轻便性简化了MySQL的部署和迁移&#xff0c;而Docker的资源隔离功能确保了应用程序之间无冲突。结合中间件和容器化系统&#xff0c;Docker为MySQL提供…...

PLC物联网,实现工厂设备数据采集

随着工业4.0时代的到来&#xff0c;物联网技术在工厂设备管理领域的应用日益普及。作为物联网技术的重要一环&#xff0c;PLC物联网为工厂设备数据采集带来了前所未有的便捷和高效。本文将围绕“PLC物联网&#xff0c;实现工厂设备数据采集”这一主题&#xff0c;探讨PLC物联网…...

npm安装依赖报错ERESOLVE unable to resolve dependency tree(我是在taro项目中)(node、npm 版本问题)

换了电脑之后新电脑安装包出错 &#x1f447;&#x1f447;&#x1f447; npm install 安装包报错 ERESOLVE unable to resolve dependency tree 百度后尝试使用 npm install --force 还是报错 参考 有人说是 node 版本和 npm 版本的问题 参考 新电脑 node版本&#xff1a;16.1…...

Maven仓库上传jar和mvn命令汇总

目录 导入远程仓库 命令结构 命令解释 项目pom 输入执行 本地仓库导入 命令格式 命令解释 Maven命令汇总 mvn 参数 mvn常用命令 web项目相关命令 导入远程仓库 命令结构 mvn deploy:deploy-file -Dfilejar包完整名称 -DgroupIdpom文件中引用的groupId名 -Dartifa…...

Jenkins 执行远程脚本的插件—SSH2 Easy

SSH2 Easy 是什么&#xff1f; SSH2 Easy 是一个 Jenkins 插件&#xff0c;它用于在 Jenkins 构建过程中通过 SSH2 协议与远程服务器进行交互。通过该插件&#xff0c;用户可以在 Jenkins 的构建过程中执行远程命令、上传或下载文件、管理远程服务器等操作。 以下是 SSH2 Eas…...

Starting the Docker Engine...一直转圈

出现的问题&#xff1a; 原因排查&#xff1a; 看了网上的很多篇文章&#xff0c;每个原因都排查了&#xff0c;没有发现问题。 遇到这样的情况应先看自己是否安装成功 打开运行&#xff0c;在空框中输入powershell并点击确定&#xff1a; docker version 显示版本证明安装…...

滁州网站建设公司/seo多久可以学会

任何使用CSS已有一段时间的人都会知道绝对和相对定位的优点。 回顾一下&#xff1a; position: relative允许元素从其原始位置水平&#xff08;使用left或right &#xff09;或垂直位置&#xff08;使用top或bottom &#xff09;移动。 position: absolute允许使用left &#x…...

二级建造师考试试题/整站优化的公司

refs: http://blog.chinaunix.net/uid-26404201-id-3334234.html 先看下面的Makefile&#xff1a; #exampleB : $(A)A laterall: echo $(B) 执行make命令&#xff0c;我们发现什么都没输出,我们将第3行的:换成。#exampleB $(A)A laterall: echo $(B) 执行make&#x…...

做网站 先上线再调整/2021年最为成功的营销案例

可以将JAVA变量在JSP头部定义成全局变量。 然后可以分别在JS和JSP里调用。 因为可以将JS和JSP理解为两个相互独立的块。这2个块里面的变量都是局部变量。 而局部变量是不共享的。 所以没法取到。...

网站建立网络优化/天津百度快照优化公司

Java语言的特点 特点一&#xff1a;面向对象 两个基本概念&#xff1a;类、对象。三大特性&#xff1a;封装、继承、多态。 特点二&#xff1a;健壮性 吸收了C/C语言的优点&#xff0c;但去掉了其影响程序健壮性的部分&#xff08;如指针、内存的申请与释放等&#xff09;&…...

息县网站建设公司/网站秒收录

很多小伙伴在下载游戏了之后&#xff0c;win7电脑提示缺少D3DCompiler_47.dll文件&#xff0c;这是什么原因呢&#xff0c;是因为电脑没有及时下载更新的文件&#xff0c;也是这个原因导致无法加载游戏&#xff0c;只要我们重新下载一个就可以了&#xff0c;具体的解决方法一起…...

做网站公司 营销/百度竞价开户哪家好

为什么80%的码农都做不了架构师&#xff1f;>>> 药品API列表 API描述基础www.tngou.net/api/drug/classify 取得药品分类&#xff0c;可以通过分类id取得药品列表重要www.tngou.net/api/drug/list取得药品列表&#xff0c;也可以用分类id作为参数一般www.tngou.net…...