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’, '我是父组件')}
posted on 2019-01-09 21:06  瑶哥哥可真帅啊!  阅读(133)  评论(0编辑  收藏  举报