怎样实现vue父子组件间通信
这次给大家带来怎样实现vue父子组件间通信,实现vue父子组件间通信的注意事项有哪些,下面就是实战案例,一起来看一下。
组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。
在说如何实现通信之前,我们先来建两个组件father.vue和child.vue作为示例的基础。
//父组件 <template> <p> <h1>我是父组件!</h1> <child></child> </p> </template> <script> import Child from '../components/child.vue' export default { components: {Child}, } </script>
//子组件 <template> <h3>我是子组件!</h3> </template> <script> </script>
这两部分的代码都很清晰明了,父组件通过import的方式导入子组件,并在components属性中注册,然后子组件就可以用标签
示例效果一
1.通过prop实现通信
子组件的props选项能够接收来自父组件数据。没错,仅仅只能接收,props是单向绑定的,即只能父组件向子组件传递,不能反向。而传递的方式也分为两种:
(1)静态传递
子组件通过props选项来声明一个自定义的属性,然后父组件就可以在嵌套标签的时候,通过这个属性往子组件传递数据了。
<!-- 父组件 --> <template> <p> <h1>我是父组件!</h1> <child message="我是子组件一!"></child> //通过自定义属性传递数据 </p> </template> <script> import Child from '../components/child.vue' export default { components: {Child}, } </script>
<!-- 子组件 --> <template> <h3>{{message}}</h3> </template> <script> export default { props: ['message'] //声明一个自定义的属性 } </script>
(2)动态传递
我们已经知道了可以像上面那样给 props 传入一个静态的值,但是我们更多的情况需要动态的数据。这时候就可以用 v-bind 来实现。通过v-bind绑定props的自定义的属性,传递去过的就不是静态的字符串了,它可以是一个表达式、布尔值、对象等等任何类型的值。
<!-- 父组件 --> <template> <p> <h1>我是父组件!</h1> <child message="我是子组件一!"></child> <!-- 这是一个 JavaScript 表达式而不是一个字符串。--> <child v-bind:message="a+b"></child> <!-- 用一个变量进行动态赋值。--> <child v-bind:message="msg"></child> </p> </template> <script> import Child from '../components/child.vue' export default { components: {Child}, data() { return { a:'我是子组件二!', b:112233, msg: '我是子组件三!'+ Math.random() } } } </script>
<!-- 子组件 --> <template> <h3>{{message}}</h3> </template> <script> export default { props: ['message'] } </script>
出来的效果是这样的:
示例效果二
2.通过$ref 实现通信
对于ref官方的解释是:ref 是被用来给元素或子组件注册引用信息的。引用信息将会注册在父组件的 $refs 对象上。
看不懂对吧?很正常,我也看不懂。那应该怎么理解?看看我的解释:
如果ref用在子组件上,指向的是组件实例,可以理解为对子组件的索引,通过$ref可能获取到在子组件里定义的属性和方法。
如果ref在普通的 DOM 元素上使用,引用指向的就是 DOM 元素,通过$ref可能获取到该DOM 的属性集合,轻松访问到DOM元素,作用与JQ选择器类似。
那如何通过$ref 实现通信?下面我将上面prop实现的功能,用$ref实现一遍:
<!-- 父组件 --> <template> <p> <h1>我是父组件!</h1> <child ref="msg"></child> </p> </template> <script> import Child from '../components/child.vue' export default { components: {Child}, mounted: function () { console.log( this.$refs.msg); this.$refs.msg.getMessage('我是子组件一!') } } </script>
<!-- 子组件 --> <template> <h3>{{message}}</h3> </template> <script> export default { data(){ return{ message:'' } }, methods:{ getMessage(m){ this.message=m; } } } </script>
从上面的代码我们可以发现,通过ref=‘msg'可以将子组件child的实例指给$ref,并且通过.msg.getMessage()调用到子组件的getMessage方法,将参数传递给子组件。下面是“ console.log( this.$refs.msg);”打印出来的内容,这可以让大家更加了解,究竟通过ref我们获取了什么:
console.log
最后的效果是这样的:
示例效果三
这里再补充一点就是,prop和$ref之间的区别:
prop 着重于数据的传递,它并不能调用子组件里的属性和方法。像创建文章组件时,自定义标题和内容这样的使用场景,最适合使用prop。
$ref 着重于索引,主要用来调用子组件里的属性和方法,其实并不擅长数据传递。而且ref用在dom元素的时候,能使到选择器的作用,这个功能比作为索引更常有用到。
3.通过$emit 实现通信
上面两种示例主要都是父组件向子组件通信,而通过$emit 实现子组件向父组件通信。
对于$emit官网上也是解释得很朦胧,我按我自己的理解是这样的:
vm.$emit( event, arg )
$emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数。
<template> <p> <h1>{{title}}</h1> <child @getMessage="showMsg"></child> </p> </template> <script> import Child from '../components/child.vue' export default { components: {Child}, data(){ return{ title:'' } }, methods:{ showMsg(title){ this.title=title; } } } </script>
<template> <h3>我是子组件!</h3> </template> <script> export default { mounted: function () { this.$emit('getMessage', '我是父组件!') } } </script>
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
怎样使用nodejs express配置自签名https服务器
以上是怎样实现vue父子组件间通信的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

上篇文章(链接),小枣君给大家介绍了宽带技术从ISDN、xDSL到10GPON的发展历程。今天,我们来聊聊即将到来的新一代光纤宽带技术——50GPON。█F5G和F5G-A介绍50GPON之前,先说说F5G和F5G-A。2020年2月,ETSI(欧洲电信标准化协会)推进了一套以10GPON+FTTR、Wi-Fi6、200G光传送/汇聚、OXC等技术为基础的固定通信网络技术体系,并将其命名为F5G,也就是第五代固网通信技术(The5thgenerationFixednetworks)。F5G是固网

不少用户在玩win10的的一些游戏的时候总是会遇到一些问题,比如说卡屏和花屏等等情况,这个时候我们是可以采用打开directplay这个功能来解决的,而且功能的操作方法也很简单。win10旧版组件directplay怎么安装1、在搜索框里面输入“控制面板”然后打开2、查看方式选择大图标3、找到“程序和功能”4、点击左侧的启用或关闭win功能5、选择旧版这里的勾选上就可以了

Vue与服务器端通信的探析:处理断网情况的策略引言:在现代Web开发中,Vue.js已成为一种广泛使用的前端框架。然而,由于网络环境的不稳定性,处理断网情况是一个需要我们考虑的重要问题。本文将分析如何在Vue中处理断网情况,并给出相应的代码示例。一、断网情况分析在网络状况较好的情况下,Vue可以通过Ajax请求或WebSocket与服务器进行通信。但是,

如何通过PHP与P2P协议实现点对点通信随着互联网的发展,点对点(peer-to-peer,简称P2P)通信逐渐成为一种重要的通信方式。与传统的客户端-服务器通信方式相比,P2P通信具有更好的稳定性和伸缩性。在本文中,我们将介绍如何使用PHP与P2P协议实现点对点通信,并提供相应的代码示例。首先,我们需要了解P2P通信的基本原理。P2P协议允许多台计算机直接

原文标题:《无线鼠标到底是怎么做到无线的?》无线鼠标慢慢成了现在办公电脑的标配,从此再也不用拖着长长的线跑来跑去了。可是,无线鼠标是怎么工作的呢?今天我们一起来学习一下No.1无线鼠标的发展史你知道吗,无线鼠标现在也已经40岁了,1984年的时候,罗技研制了世界上第一款无线鼠标,不过这个无线鼠标采用红外线作为信号的载体,据说长得像下面图片这个样子,后面由于性能原因而宣告失败。直到十年后的1994年,罗技终于研发成功了一个工作在27MHz的无线鼠标,这个27MHz频率也成了很长一段时间内,无线鼠标

Angular框架中组件的默认显示行为不是块级元素。这种设计选择促进了组件样式的封装,并鼓励开发人员有意识地定义每个组件的显示方式。通过显式设置CSS属性 display,Angular组件的显示可以完全控制,从而实现所需的布局和响应能力。

win10旧版组件是需要用户自己去设置里面打开的,因为很多的组件平时都是默认关闭的状态,首先我们需要进入到设置里面,操作很简单,跟着下面的步骤来就可以了win10旧版组件在哪里打开1、点击开始,然后点击“win系统”2、点击进入控制面板3、再点击下面的程序4、点击“启用或关闭win功能”5、在这里就可以选择你要的打开了

在如今这个数字时代,宽带已经成为我们每个人、每个家庭的生活必需品。如果没有它,我们会坐立难安、心绪不宁。那么,你知道宽带背后的技术原理吗?从最早期的56k“猫”拨号,到现在的千兆城市、千兆家庭,我们的宽带技术到底经历了怎样的变革?今天这篇文章,我们就来详细了解一下——“宽带的故事”。█xDSL和ISDN下面这个界面,你见过吗?我相信很多70后80后的小伙伴,肯定见过,并且非常熟悉。没错,这就是当年我们最初接触互联网时,进行“拨号上网”的界面。那还是20多年前,小枣君还在上大学的时候。为了上网,我
