Vue父子组件间通信

组件是vue.js最强大的功能之一,但组件之间的作用域是相互独立的,这就意味着不同组件之间的数据是无法相互引用的。为实现组件之间的通信,vue为我们提供了三种方式:prop、ref、emit。

首先创建两个组件,分别作为父组件和子组件,父组件在自己内部import引入子组件,并在components属性中注册,然后子组件就可以用标签的形式嵌进父组件了。

通信:
1.通过prop实现通信
子组件的props选项能够接收来自父组件的数据;只能接收,props是单向绑定的,只能父组件向子组件传递,不能反过来。且传递的方式也有两种:
(1)静态传递
子组件通过props选项来声明一个自定义的属性,然后父组件就可以在嵌套标签的时候,通过这个属性往子组件传递数据了。
父组件:
Vue父子组件间通信_第1张图片
子组件:
子组件template
子组件props
(2)动态传递
我们已经知道了可以像上面那样给 props 传入一个静态的值,但是我们更多的情况需要动态的数据。这时候就可以用 v-bind 来实现。通过v-bind绑定props的自定义的属性,传递去过的就不是静态的字符串了,它可以是一个表达式、布尔值、对象等等任何类型的值;当它发生变化时,传递过去的数据也会相应改变。
父组件:
Vue父子组件间通信_第2张图片
Vue父子组件间通信_第3张图片
子组件和上面静态传递时一样

2.通过ref实现通信
ref的官方解释是:ref是被用来给元素或子组件注册引用信息的。引用信息又将会注册在父组件的ref对象上。
解释一下:
如果ref用在子组件上,指向的是组件实例,可以理解为对子组件的索引,通过ref可能获取到子组件中定义的属性和方法。
若在普通的DOM元素上使用ref,引用指向的就是DOM元素,通过ref就可能获取到该DOM的属性集合,轻松访问到DOM元素,作用与JQ选择器类似。
父组件:
Vue父子组件间通信_第4张图片
父组件mounted
子组件:
子组件template
Vue父子组件间通信_第5张图片
prop和$ref之间的区别:
prop 着重于数据的传递,它并不能调用子组件里的属性和方法。像创建文章组件时,自定义标题和内容这样的使用场景,最适合使用prop。
$ref 着重于索引,主要用来调用子组件里的属性和方法,其实并不擅长数据传递。而且ref用在dom元素的时候,能使到选择器的作用,这个功能比作为索引更常有用到。

3.通过emit实现通信
上面两种方式都是父组件向子组件通信,而emit是子组件向父组件通信。
对于emit的理解:
vm.$emit( event, arg );
$emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数。
父组件:
父组件template
父组件data中:title: ‘’
Vue父子组件间通信_第6张图片
子组件:
子组件template
子组件mounted

你可能感兴趣的:(vue.js,前端,javascript)