Vue2组件间通信---子传父值自定义事件

Vue2组件间通信—子传父值自定义事件

Vue2中组件间通信系列,本篇是关于子组件向父组件传值的介绍,这里我会用通俗的语言帮助大家理解自定义事件


功能:

父组件可以接受到子组件传递的数据,适用于组件间通信。


原理:

子组件要给父组件传递数据,此时要在父组件中给子组件绑定一个自定义事件,回调写在父组件中。那么触发这个自定义事件的就是子组件,传递的参数就是子组件要给父组件传递的数据。


绑定自定义事件的两种方式:

  • 第一种方式:

父组件:

<template>
  <div>
    <Son @show="showName" />
  </div>
</template>

<script>
import Son from './Son.vue'
export default {
  name:'Father',
  data(){
    return{
    }
  },
  methods:{
    showName(name){
      console.log(name)
    }
  },
  components:{
    Son
  }
}

子组件:

export default {
  name:'Son',
  mounted(){
    this.$emit('show',"Son子组件")
  }
}
</script>

控制台结果:

Son子组件
  • 第二种方式:

父组件:

<template>
  <div>
    <Son ref="MySon"/>
  </div>
</template>

<script>
import Son from './Son.vue'
export default {
  name:'Father',
  methods:{
    ShowName(name){
      console.log(name)
    }
  },
  mounted(){
    this.$refs.MySon.$on('show',this.ShowName)
  },
  components:{
    Son
  }
}
</script>

子组件:

<template>
 <button @click="toFather">为Father传值</button>
</template>

<script>
export default {
  name:'Son',
  methods:{
    toFather(){
      this.$emit('show',"Son子组件")
    }
  },
}
</script>

控制台结果:

Son子组件

区别(小坑):

两种方式的目的都是为了子传父值,不过在这里需要注意的是第二种方式在为子组件绑定自定义事件的时机与第一种方式不同,第二种是在整个页面挂载之后对子组件绑定自定义事件,而Vue的执行机制是子组件比父组件先进行渲染,也就是说子组件都已经渲染完毕了之后我们才给它绑定自定义事件,所以子组件中触发自定义事件的函数不可以在mounted钩子中执行。通俗点说就是子组件比父组件先进行渲染,子组件的mounted函数比父组件的先执行,在执行的时候父组件的自定义事件还没有绑定(查无此人)。所以在示例中对于第二种方式我们在子组件中用按钮去触发自定义事件。

补充:

  1. 我们最好在组件销毁之前对自定义事件进行解绑,this.$off (‘自定义事件’), 这一过程可以在beforeDestroy钩子中执行
  2. 对于绑定原生DOM事件也可以用native修饰符修饰 如: @click.native="…" 这样click事件就变成了原生Dom事件不会被当做自定义事件执行。
  3. 注意点:对于第二种方式绑定自定义事件的回调函数要么写成命名函数的方式到methods中,要么写成箭头函数的形式,否则this指向不是组件实例。
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值