vue父子组件通讯
父组件中引入子组件:import
1、通过prop实现通信
子组件的props选项能够接收来自父组件的数据(不能传递)
(1)静态传递
子组件通过props选项来声明一个自定义的属性,然后父组件就可以在嵌套标签的时候,通过这个属性往子组件传递数据了
(2)动态传递(常用)
通过v-bind绑定props的自定义属性,传递过去就是一个动态值
2、通过$ref实现通信
如果ref用在子组件上,指向的是组件实例,可以理解为对子组件的索引,通过$ref可以获取到在子组件里定义的方法和属性
如果ref用在普通的dom元素上,引用指向的就是dom元素,通过$ref可以获取该dom属性集合,轻松访问到dom元素,作用与jq选择器类似。
举例:
父组件中:<child ref=‘msg'></child>
mounted:function () {this.$ref.msg.getMessage ('我是子组件') }
子组件中:methods: {getMessage (m) {this.message = m}}
// 解释:通过ref=‘msg’可以将子组件child的实例指给$ref;并通过.msg.getMessage()调用到了子组件getMessage方法
(1)prop着重于数据的传递,它不能调用子组件里的属性和方法,像创建文章组件时,自定义标题和内容这样的使用场景,适合使用prop
(2)$ref着重于索引,主要用来调用子组件里的属性和方法,其实并不善于传递数据,而且ref用在dom元素的时候,能起到选择器的作用,这个功能比索引更常用到。
3、通过$emit实现通信(实现子组件向父组件通信)
vm.$emit(event, arg)
$emit绑定一个自定义事件event,当语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数
举例:
父组件中:<child @getMessage=’showMsg'></child>
methods: {showMsg (title) {this.title = title}}
子组件中:mounted: function () {this.$emit(‘getMessage’, '我是父组件')}