vue 组件通讯

组件通讯的方案

  1. 通过 props 传递 (父子组件传值)
  2. 通过 $emit 触发 父组件自定义事件
  3. 父组件使用 ref 访问子组件实例
  4. EventBus :需要中间文件,$emit触发事件,$on监听
  5. $parent 或者 $root : 可以利用祖先组件搭桥
    • this.$parent.on('add',this.add) 监听事件
    • this.$parent.emit('add')触发事件
  6. $children
  7. $attrs 与 $listeners (可以访问未在props接收的属性和方法)
  8. Provide(祖先提供) 与 Inject (后代注入)
  9. Vuex

总结:

  1. 父子: props 与 $emit进行传递,也可选择ref
  2. 兄弟:$bus,$parent
  3. 祖先与后代:$attrs与$listeners 或者 Provide与 Inject
  4. 复杂关系: vuex存放共享的变量

demo

  1. 父子: props 与 $emit进行传递,也可选择ref
// parent.vue
<Children ref="child" :msg=msg @handleClick="handleClick"></Children>
// JS部分
<script>
// $refs可以访问子组件的属性和方法
console.log(this.$refs.child.str) // abc
</script>
// Children.vue  只写核心代码,不是完整组件
<template>
<div @click="$emit('handleClick', 'good')">
{{mst}}
<div>
</template>
<script>
props: ['msg', 'handleClick']
data(){return {str: 'abc'}
}
</script>
  1. 兄弟:$bus,$parent
// evenBus.js  
// 方法一:创建一个中央时间总线类 
class Bus {  constructor() {  this.callbacks = {};   // 存放事件的名字  }  // 把事件以{fnName: []}存起来$on(fnName, fn) {  this.callbacks[fnName] = this.callbacks[fnName] || [];  this.callbacks[fnName].push(fn);  }  // 通过方法名调用$emit(fnName, args) {  if (this.callbacks[fnName]) {  this.callbacks[fnName].forEach((cb) => cb(args));  }  }  
}  // main.js  
Vue.prototype.$bus = new Bus() // 将$bus挂载到vue实例的原型上 // 方法二:Vue已经实现了Bus的功能,可以直接引入使用
import Vue from 'vue'
Vue.prototype.$bus = new Vue() 
// 使用----------------------------------------------------------
// Com1.vue 添加事件
this.$bus.$on('foo', this.handle)  
// Com2.vue 触发事件
this.$bus.$emit('foo')  
  1. 祖先与后代:$attrs与$listeners 或者 Provide与 Inject
// parent.vue ---------------------->
<Child foo="foo" @testEvent="testEvent"/> // Child.vue:并未在props中声明foo  -------------------->
<p>{{$attrs.foo}}</p>  
<Grandson v-bind="$attrs" v-on="$listeners"></Grandson>  // Grandson.vue -------------------------------->
<div @click="$emit('testEvent', 'msg from grandson')">  
{{foo}}  
</div>  
// parent.vue ---------------------->
<Child/>
provide(){  return {  foo:'foo',testEvent: this.testEvent}  
},
methods: {testEvent () {console.log("你好")}
}
// Child.vue  -------------------->
<Grandson></Grandson>  // Grandson.vue -------------------------------->
<div @click="$emit('testEvent', 'msg from grandson')">  
{{foo}}  
</div>  
inject:['foo', 'testEvent']
  1. 复杂关系: vuex存放共享的变量
    • state: 用来存放共享变量的地方

    • getter: 可以增加一个getter派生状态,(相当于store中的计算属性),用来获得共享变量的值

    • mutations: 用来存放修改state的方法。

    • actions: 也是用来存放修改state的方法,不过action是在mutations的基础上进行。常用来做一些异步操作

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

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

相关文章

最大单词数算法分析

题目描述&#xff1a; 算法一&#xff1a; 代码实现&#xff1a; # include<stdio.h> # include<string.h>int main(){//char text[100]"leet code";//char brokenLetters[26]"lt";char text[100]"hello world";char brokenLetters…

HBASE命令行查看中文字符

问题记录 中文显示的是编码字符不方便查看value\xE5\xB8\xB8\xE5\xAE\x89\xE5\xAE\x891修改前中文显示&#xff1a; 解决方法 1、列族 : 列名 : toString ’2、列族 : 列名 : c(org.apache.hadoop.hbase.util.Bytes).toString ’ scan karry:student,{COLUMNS > [info:…

国际语音通知是什么?国际语音通知系统有哪些功能?

一、国际语音通知是什么&#xff1f; 如同国际短信通知&#xff0c;国际语音通知也在多种生活场景中扮演着重要的角色&#xff0c;如会议通知、商品发货通知、物流更新通知、快递取件通知、外卖取餐通知等。那么什么是语音通知呢&#xff1f; 国际语音通知可将通知的文本信息使…

外包干了2年,技术退步明显。。。

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…

Linux驱动开发学习笔记1《字符设备驱动开发》

目录 一、字符设备驱动简介 二、chrdevbase 字符设备驱动开发实验 1.创建驱动程序的目录 2.创建vscode工程 3.编写实验程序 4.编译驱动程序和测试APP代码 &#xff08;1&#xff09;加载驱动模块 &#xff08;2&#xff09;创建设备节点文件 &#xff08;3&#xff…

解决 MySQL 5.7 中的字符集兼容性问题

解决 MySQL 5.7 中的字符集兼容性问题 问题描述 错误信息&#xff1a;在 MySQL 5.7 环境中&#xff0c;尝试使用 utf8mb4_0900_ai_ci 字符集排序规则时出现错误。原因&#xff1a;utf8mb4_0900_ai_ci 是 MySQL 8.0 引入的&#xff0c;而不支持 MySQL 5.7。 解决方案 为了使…

深度学习 -- 卷积神经网络

1、卷积神经网络的结构 大卫休伯尔( David Hunter Hubel ) 等人研究发现&#xff0c;猫的视皮层上 存在简单细胞( simple cell )和复杂细胞( complex cell )&#xff0c;简单细胞会对 感受野中特定朝向的线段做出反应&#xff0c;而复杂细胞对于特定朝向的钱段移动也能做出反应…

伪原创API,批量创作伪原创文章

内容创作已经成为互联网领域中不可或缺的一环。越来越多的内容创作者和网站管理员开始寻找更高效的伪原创工具&#xff0c;以确保其内容的独特性。 百度文心一言API 我们来了解一下百度文心一言API。作为百度文心推出的一项人工智能服务&#xff0c;通过自然语言处理技术&…

【开源威胁情报挖掘3】开源威胁情报融合评价

基于开源信息平台的威胁情报挖掘综述 写在最前面5. 开源威胁情报关联分析5.1 开源威胁情报网络狩猎&#xff1a;技术、方法和最新研究应用实例和未来方向 5.2 开源威胁情报态势感知关键技术和方法应用实例和未来方向 5.3 开源威胁情报恶意检测关键技术和方法应用实例和未来方向…

结构体相关知识

结构体&#xff1a;可以使用结构体管理不同数据类型的数据&#xff1b; struct 类型名{数据类型1 成员1;数据类型2 成员2;数据类型3 成员3;...数据类型n 成员n;};特点&#xff1a;1、所有的成员都是变量&#xff1b;2、成员之间用分号隔开&#xff1b;3、成员在内存空间的存储是…

【大学英语视听说上】“智力”口语问答练习

题目&#xff1a; book 2, page 9, question 4 回答&#xff1a; 1: What do you think of the view “Intelligence must be bred, not trained”? I think this view is biased. The view suggests that intelligence is primarily determined by genetic factors and inh…

solidity实现ERC20代币标准

文章目录 IERC20ERC20 IERC20 IERC20 是 ERC20 标准的接口规范,它定义和规范了一个标准 ERC20 代币合约应该实现的功能。这里让 ERC20 合约直接继承自 IERC20 接口。 // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;interface IERC20 { // 当 value 单位的货币从账户…

生成对抗网络——研讨会

时隔一年&#xff0c;再跟着李沐大师学习了GAN之后&#xff0c;仍旧没能在离散优化中实现通用的应用&#xff0c;实在惭愧&#xff0c;借着组内研讨会的机会&#xff0c;再队GAN的前世今生做一个简单的综述。 GAN产生的背景 目前与GAN相关的应用 去reddit社区的机器学习板块…

【ArcGIS Pro微课1000例】0041:Pro强大的定位搜索功能、定位窗格、地图上查找地点

一谈到搜索,你是不是还停留在矢量数据的属性表中呢?今天给大家介绍ArcGIS Pro中定位搜索强大功能的使用,可以基于在线地图、矢量数据等多种数据源,进行地址、地名、道路、坐标等的查找。 文章目录 一、定位工具介绍二、在线地图搜索三、本地矢量数据搜索四、无地图搜索五、…

为何全球电商都在拼“质价比”?

远在西雅图的希拉里&#xff0c;在著名的“黑色星期五”大促开始之前&#xff0c;她就已经准备好了一份购物清单。 然而&#xff0c;她发现身边的朋友们总是拉她组团购物。 在朋友和社交媒体的持续轰炸下&#xff0c;希拉里决定尝试一下这个让人贼上头的Temu。 最终&#xf…

学习-java多线程面试题

为什么不建议用Executors启动线程池 *队列LinkedBlockingQueue是没有边界的队列,请求多会造成OOM *建议使用ThreadPoolExecutors 线程池中提交一个任务的流程&#xff1f; 1先判断线程池是否有线程&#xff0c;如果与就直接执行&#xff0c;没有就放队列 2如果队列满了&#…

Linux常用命令——atrm命令

在线Linux命令查询工具 atrm 删除待执行任务队列中的指定任务 补充说明 atrm命令用于删除待执行任务队列中的指定任务。 语法 atrm(选项)(参数)选项 -V&#xff1a;显示版本号。参数 任务号&#xff1a;指定待执行队列中要删除的任务。 实例 删除已经排队的任务 atq…

FPGA纯verilog实现 LZMA 数据压缩,提供工程源码和技术支持

FPGA纯verilog实现 LZMA 数据压缩&#xff0c;提供工程源码和技术支持 目录 1、前言2、我这儿已有的FPGA压缩算法方案3、FPGA LZMA数据压缩功能和性能4、FPGA LZMA 数据压缩设计方案 输入输出接口描述数据处理流程 LZ检索器数据同步LZMA 压缩器为输出LZMA压缩流添加文件头5、…

Debian下载安装教程

目录 一.前言二.下载三.安装 一.前言 这篇文章展示如何使用VMware Workstation Player安装Debian12虚拟机。 二.下载 官网地址&#xff1a;官网 进入官网之后可以直接点击下载Debian选项&#xff0c;这样下载的是最新版的网络安装镜像。 三.安装 使用VMware Workstation P…

PTA校赛算法题十道java、C++详解

目录 7-1 专1 签到 7-2 专2 令人眼花缭乱的字符串 7-3 专3 VALORANT 7-4 专4 吃蛋糕 7-5 专5 Game 7-6 专6 二进制回文串 7-7 专7 度假 7-8 专8 括号匹配Plus 7-9 专9 生成最少叶子树 7-10 专10 禁止超速 这篇文章是基于我们前不久的校赛写的&#xff0c;校赛给的…