vue组件通信

本文介绍了Vue中组件通信的几种常见方式,包括父子组件通信和非父子组件通信。在父子组件通信中,讨论了通过属性传递数据、子组件修改父组件对象的值以及父组件传递函数给子组件。而在子父组件通信中,重点讲述了子组件通过自定义事件发送数据给父组件。对于非父子组件通信,提到了通过父组件的ref属性建立关系链以及使用事件总线实现跨组件通信。
摘要由CSDN通过智能技术生成

组件通信是单向的

父子组件通信

父组件将自己的数据传递给子组件

  1. 父组件将自己的数据通过属性绑定的形式传递给子组件

  2. 子组件在自己的配置项中通过 props 来接收这个属性
    Vue.component(‘Son’,{
    template: ‘#son’,
    // props: [‘aa’],
    props: {
    // 属性: 属性的数据类型 给数据做属性验证,验证数据类型
    ‘aa’: Number
    }
    })

  3. 这个属性的用法和data中属性相同

  4. 特点:父组件中修改这个值,子组件中也同样改变,子组件中修改父组件中不会改变(符合组件通信的单向原则)

子父组件通信

父组件传一个对象给子组件,子组件进行修改

1.写法与用法与父子组件通信传一个普通数据类型一样,
2.特点:子组件修改对象的值父组件的值也改变(引用数据类型的堆栈特性,违背组件通信的单向原则)

父组件传一个函数给子组件,子组件进行调用

1.写法与用法与父子组件通信传一个普通数据类型一样
2.特点:子组件调用函数,父组件中的函数表达式执行,因为函数在父组件中,所以能间接的修改父组件中的数据,违背组件通信的单向原则)

子组件将一个数据发送给父组件

如何实现:自定义事件
流程:

  1. 父组件中定义一个数据,然后在methods定义一个方法用来修改这个数据
Vue.component('Father',{
    template: '#father',
    data () {
        return {
            num: 0
        }
    },
methods: {
    add ( val ) {
        console.log('add')
        this.num += val
        }
    }
})
  1. 父组件通过自定义事件的形式,将父组件的一个方法传递给子组件
    <Son @aa = 'add'></Son>
  2. 子组件可以通过 this. e m i t ( 自 定 义 事 件 名 称 , 参 数 1 , 参 数 2... ) 来 订 阅 这 个 自 定 义 事 件 t h i s . emit( 自定义事件名称,参数1,参数2...) 来订阅这个自定义事件 this. emit(12...)this.emit(‘aa’,this.money)

非父子组件通信

通过父组件给子组件绑定ref属性形成一个关系链
  • 在别的组件中获取另一个组件
    this.$parent.$ref.refName
事件总线

通过新建一个vue实例对象,在之前的vue中使用这个实例的全局属性

var bus = new Vue()

Vue.component('Brother',{
    template: '#brother',
    data () {
        return {
            money: 1000
        }
    },
    methods: {
        give () {
            bus.$emit('aa',this.money)
        }
    }
})

Vue.component('Sister',{
    template: '#sister',
    data () {
        return {
            jk: 0
        }
    },
    mounted () {
        bus.$on('aa',( val ) => {
            this.jk += val
        })
    }
})
new Vue({
    el: '#app',
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值