Vue2.x中父子组件通信

Vue2 ref和$refs获取dom和组件 【代码】Vue2 ref和$refs获取dom和组件。 阅读详情

在这里就引用之前写的项目,举个栗子

先贴上代码

list.vue组件

<template>
  <div class="list">
    <ul v-for="(friend, i) in friendList">
      <li @click="setContact(i)"> 
        <p class="name">{{friend.username}}</p>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  props: ["friendList"],
  methods: {
  // 创建一个setContact方法,把当前点击的名称传给父组件
    setContact(index) {
      this.$emit("set-contact", this.friendList[index]);
    },
  // 创建一个方法,获取参数
    getList(list) {
      console.log(list);
      console.log(typeof this.$parent);// object
    },
  },
};
</script>

父组件chat.vue

<template>
  <div id="chat">
        <user-list :friendList="this.friendList" @set-contact="getcontact"ref="friends"></user-list>
  </div>
</template>

<script>
import UserList from "../../components/chat/list";
export default {
  data() {
    return {
      friendList: [
        {
          username: "tom"
        },
        {
          username: "cat"
        },
        {
          username: "dog"
        }
      ],
    };
  },
  components: {
    UserList
  },
   mounted() {
    console.log(this.$refs.friends);
    this.$refs.friends.getList(this.friendList);
    console.log(this.$children instanceof Array); // true
    console.log(this.$children);  
  },
  methods: {
    // 接收子组件返回的数据
    getcontact(index) {
      console.log(index);
    },
  },
};
</script>

通过props父传子,通过$emit子传父

在父组件中引用子组件,再把数据通过参数传给子组件,如果需要子组件在返回数据的话,父组件可以通过自定义事件的形式,接收数据。

如下图,父组件通过friendList传给子组件,子组件用props中的friendList接收,然后显示出来,当点击某个li的时候,子组件就通过$emit把当前点击li的username传给父组件,父组件通过getcontact接收。

image-20210517200059214

image-20210517200215929

注意:父组件中@set-contact中的set-contact,必须与子组件中this.$emit(“set-contact”, this.friendList[index])中set-contact一致。

在子组件中利用props接收父组件中传过来的值,相当于形参,也可以自己定义接收参数类型,比如这样:

// 把props: ["friendList"]换成
props: {
    friendList: {
      type: Array,
    }
}

效果图

image-20210517201148120

当我们点击某个item时,比如cat,控制台就会显示,就会显示子组件返回的数据了。

image-20210517201241762

通过$refs

通过在父组件中的子组件中声明ref,那么这个ref就指向子组件实例

image-20210517210505296

接下来,就可以通过this.$refs.名称 的形式调用子组件的方法。

如下图,通过在父组件中的mounted中调用this.$refs.friends可以看到一个vue实例对象,这个对象就是list.vue实例,而且可以通过this. $refs.friends.getList(this.friendList)形式调用子组件的方法,并把参数this.friendList传给子组件。

image-20210517204207913

image-20210517204518369

image-20210517204600947

通过$parent和 $children

通过$parent可以访问父组件,通过 $children可以访问子组件,用法跟前面两种大同小异,主要就是一些细节的问题

$parent返回一个object对象, $children返回的是一个数组对象

通过下图,可以看到$parent和 $children返回的是一个对象,需要引用组件方法属性的话,需要this. $parent.方法和this. $children[0].方法

image-20210517215219629

image-20210517215002853

image-20210517214741181

这个用的比较少,我主要用的是上面两个

别再乱用.sync了!Vue 2.x父子组件通信的5个真实场景与最佳实践 本文深入探讨了Vue 2.x中.sync修饰符在父子组件通信中的正确使用方式,通过5个真实业务场景分析其适用边界与最佳实践。从表单控件到模态框开关,再到复杂对象更新,帮助开发者避免滥用.sync导致的数据流混乱问题,提升代码可维护性。特别对比了v-model与.sync的差异,并提供了Vue 3兼容性建议。 阅读详情

相关推荐

Vue父子组件通信案例详解

本文还有配套的精品资源,点击获取 简介:Vue.js 是一个流行的前端框架,以组件化开发为核心。在“Vue父子组件通信案例”中,我们将详细学习Vue 2.x版本中父子组件的通信机制,包括数据如何从父组件传递到子组件,以及子组件如何向父组件发送数据。本案例中,我们将看到在子组件中定义和接收props,以及父组件如何绑定这些props。此外,还会探讨子组件通过 $emi...

weixin_29859471的博客 1237

vue中$refs的三种用法

我们都知道,在vue2中获取DOM元素,可以直接在元素上绑定ref属性,然后获取到DOM元素的属性值,这种方法在vue3 中仍然可以使用,但也会有一些问题。下面就介绍$refs的三种用法: 1、vue2中 在vue2中,我们可以直接使用ref获取元素,也就是直接在元素上绑定ref属性,在直接使用this.$refs[‘自定义属性名’] 就能直接获取。但是这样也是有一定风险的。因为ref绑定的在元素上,所以当元素没有进行渲染时,是不能通过ref获取到元素的。 <template> &l

m0_66333906的博客 2万+

Excel药品说明书数据库:从零开始搭建医药数据查询系统(附完整模板)

本文详细介绍了如何从零开始搭建Excel药品说明书数据库,提供完整的医药数据查询系统模板。涵盖数据库架构设计、数据清洗标准化、智能查询系统搭建及维护优化,帮助医药从业者高效管理药品信息,提升查询速度和准确性。

weixin_28327051的博客 233

VUE2语法-$refs和ref属性的使用

VUE中使用ref修饰标签,通过$refs获取标签的相关信息。

雾林小妖的博客 1万+

Simulink单相桥式有源逆变电路仿真:从器件选型到波形分析(MATLAB 2018a实战)

本文基于MATLAB 2018a的Simulink平台,详细演示了单相桥式有源逆变电路的完整仿真流程。从Simscape/Power Systems库的器件选型、参数配置,到触发脉冲设置与电路连接,逐步指导搭建仿真模型。通过调整触发角α,直观展示了电路从整流到有源逆变的工作状态切换,并深入分析了负载电压、电流波形,以及逆变颠覆现象的产生条件与特征。

cake8的博客 1159

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析

本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。

blue42的博客 713

vue2:vue2__ref ($refs) 用法详解

如果ref 是循环出来的,有多个重名,那么ref值会是一个数组 ,此时要拿到单个ref 只需要循环就可以。mounted(){} 钩子中调用,或者在 this.$nextTick(()=>{}) 中调用。链接:https://juejin.cn/post/7220448609400307772。ref 需要在dom渲染完成后应用,在使用时确保dom已经渲染完成。商业转载请联系作者获得授权,非商业转载请注明出处。作者:NoSilverBullet。

weixin_1095的博客 6490

MySQL常见面试题汇总(建议收藏!!!)

目录一、索引相关(1)什么是索引?(2)索引是个什么样的数据结构呢?(3)为什么使用索引?(4)Innodb为什么要用自增id作为主键?(5)Hash 索引和 B+ 树索引有什么区别或者说优劣呢?(6)什么是聚簇索引(6)非聚簇索引一定会回表查询吗?(6)聚簇索引和非聚簇索引的区别(6)MyISAM和InnoDB实现B+树索引方式的区别是什么?(6)MySQL中有四种索引类型,可以简单说说吗?(6)覆盖索引是什么?(6)联合索引是什么?为什么需要注意联合索引中的顺序?(6)创建的索引有没有被使用到?或者说怎

蔡政洁的博客 7万+

Vue实例(包含$refs)

1、this 在option api上通过this即可访问Vue实例对象 2、$root 获取当前组件的根节点 3、$parent 获取当前组件的父组件(Vue3中已经被弃用) 4、$children 获取当前组件的子组件 获得一个数组(Vue3中已经被弃用) 5、$mount() $mount(‘选择器’)与el相同都是挂载元素 var app=new Vue({ data:{ message:'Hello Vue!' } }).$mount('#app) 6、$el 组件渲染的时候的根节点对象

interstingh的博客 1678

从零搭建uniapp+vue3+ts+tailwindcss多端兼容开发环境

本文详细介绍了如何从零搭建uniapp+vue3+ts+tailwindcss多端兼容开发环境,包括环境准备、TailwindCSS集成、小程序兼容性解决方案以及样式优化技巧。通过实战步骤和常见问题解答,帮助开发者快速掌握这套技术栈,提升开发效率。

weixin_28693309的博客 323

如何使用superpowers

"这个 bug 帮我修一下" → 我会自动走 systematic-debugging → TDD → verify 流程。- "帮我添加一个登录功能" → 我会自动走 brainstorming → plan → TDD → verify 流程。只要任务有 1% 的可能性适用某个技能,我就会先调用它再行动。→ TDD(测试驱动开发)→ verification(验证)→ code review(代码审查)提出需求 → brainstorming(头脑风暴)→ writing-plans(编写计划)

xiaojingjianqiang的博客 610

Vue 2.x 父子组件之间的通信

在Vue的世界里,爹和儿子之间的沟通是不是也想现实世界里一样呢?

m0_47883103的博客 3652

FPGA上跑100G网卡?手把手教你用Xilinx IP核配置RDMA(附避坑指南)

本文详细介绍了如何在Xilinx UltraScale+ FPGA平台上配置100G RDMA网络加速方案,涵盖CMAC和ERNIC IP核的深度配置技巧、硬件架构设计及系统集成。通过实战指南和避坑建议,帮助开发者实现超低延迟、零拷贝的数据传输,显著提升数据中心和高性能计算的网络性能。

weixin_33734785的博客 673

Vue.js 2.x 组件Props与自定义事件:父子组件通信的完整指南

Vue.js 2.x作为现代前端开发的主流框架之一,其组件化设计理念极大地提升了代码的可维护性和复用性。在Vue的组件生态中,Props与自定义事件构成了父子组件通信的基石,理解这一机制是掌握Vue开发的关键所在。本文将为初学者和普通用户提供一份通俗易懂的完整指南,帮助您快速上手Vue组件通信的核心概念。😊 ## Props基础:父组件向子组件的数据传递 Props是Vue组件间通信最基础也

gitblog_01029的博客 504

LAMMPS实例教程—In文件详解

本博文主要介绍专栏 《LAMMPS实例教程—In文件详解》, 针对于 Lammps 可分析的物理过程进行讲解,提供 In 文件以及后处理方法,持续更新。 目前分为8个专题: 1)力学专题、2)传热专题、3)相变专题、4)界面专题、5)吸附专题、6)流动专题、7)物性专题以及8)基础理论专题。

Rockyoung 3万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Vue2.X 父子组件通信 兄弟传值

Vue2.X 父子组件通信 兄弟组件传值 $emit .sync bus.js bus.$on bus.$emit

sinat_55275851的博客 942

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

vue2.X基础知识五之非父子组件通信

  在实际业务中,除了父子组件通信外,还有很多非父子组件通信的场景,非父子组件一般有两种,兄弟组件和跨多级组件。1、中央事件总线(bus)处理任何组件通信  在vue2.x中推荐使用一个空的Vue实例作为中央事件总线(bus),也就是一个中介。例如:&lt;div id="app"&gt; {{ message }} &lt;component-a&gt;&lt;/compon...

啊哈前端的专栏 419

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Vue2.x中,父子组件通信

文章目录父传子对象:注意单向数据子传父 有这么一个情况,在父组件中,使用了子组件,现在想将父中的某些值传给子,或者将子中的某些值传给父。 为了解决以上问题,通常采用的是props来实现。props的值可以是两种:字符串数组、对象; 父传子 这里首先介绍数组的情况: 在子组件中,定义props: <template> <div>{{parentStr}}</div&...

fyk的博客 402

VUE 父子组件 (本文针对的是vue 2.x)

这里写自定义目录标题VUE 父子组件 (本文针对的是vue 2.x) VUE 父子组件 (本文针对的是vue 2.x) 子组件的调用有两种方式,一个是全局注册,即在main.js中注册,另外一种就是在需用使用到的页面里在components中注册引入子组件 1.全局注册子组件 第一步,书写一个子组件(如果要引入其他的模块,就正常的import引用就好); <template> &l...

TianKongDeTangGuo的博客 328

Vue2.x中的父子组件相互通信

原理 在 Vue.js 中,父子组件的关系可以总结为 props down, events up 。 父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。看看它们是怎么工作的。 业务场景 这里指的是直接父子级关系的通信 美女(子组件)将消息发送给大群(父组件) 大群(父组件)收到美女发送的消息后再回个信息给美女(子组件) 父组件 template ...

weixin_34074740的博客 127

vue2.X基础知识四之组件及父子组件通信

一、组件注册1、在Vue中全局注册//my-component就是注册的组件自定义标签名,推荐使用小写加减号分割的形式命名 //template的DOM结构必须被一个元素包含(这里是div),否则无法渲染 Vue.component('my-component', {template: '&lt;div&gt;我是组件&lt;/div&gt;'}); var app = new Vue({ ...

啊哈前端的专栏 1502

Vue2基础-Vue2.x 父子组件数据通信 Prop 和 Event

组件参数传递 prop 监听子组件事件

龙衣 1159

vue $attrs和$listenners

Vue2.x 中的a t t r s 和 attrs和attrs和listeners或许很多Vue小白跟我一样, 在之前不太了解a t t r s 和 attrs和attrs和listenners这两个API是干嘛的, 甚至没有听过或者使用过。下面我来浅述一下我对这两个API的理解。下文将基于下面这张图片来进行解释,现在我们有三个组件, 组件之间的结构关系如下图所示: A:爷爷组件、B:父亲组件、C:儿子组件。

梨子社区 941

Vue2.x 组件间的通讯

在实际业务中,存在很多非父子组件的信息交互需求,该类需求可以通过事件总线的方法进行解决. 在Vue2.x中,推荐使用一个空的Vue实例作为中央事件总线,也就是一个中介,子组件通过发起事件的方式向中介传递信息,父组件通过事件监听的方式向中介获取信息,这跟实际生活中的通过中介买卖二手房产的情况是一致的,通过此类方法,Vue巧妙地解决了非父子组件信息交互的问题。 <!DOCTYPE html...

我的博客 605

vue中sync的使用

vue2.3.x: 以上是vue2.3.x时sync的用法,其实在平常的工作中我用到sync最多的场景一般是父子组件之间控制的dialog弹框的显示隐藏,其实看一下UI库的文档,比如element-ui的Dialog组件,它是支持sync属性 比如我们有一个list.vue <template> <div> <button @click="add">新增</button> <a-dialog :visible.sync="

YuShiYue的博客 1万+

Vue学习笔记(2)(组件化开发)

Vue2.x学习笔记。原视频教程:最全最新Vue、Vuejs教程,从入门到精通_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 第一部分:认识Vue、Vue基本语法。 # 组件化 1. 什么是组件化? 组件化是Vue.js中的重要思想 它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。 任何的应用都会被抽象成一颗组件树。 组件化思想的应用: 有了组件化的思想,我们在之后的开发中就要充分的利用它。 尽可能的将页面拆分成一个个小的、可复用的组件。 这.

Lu_xiuyuan的博客 428
上一篇: CentOS中Docker的MySQL更改配置后重启不了的两种解决方式
下一篇: 几种简单的登录方式的实现——前端+后端
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值