一次说清Vue的$emit()事件

$emit

emit:发射,射…的意思吧
用法:
$emit( eventName, […args] )

  • eventName:这是一个事件名,会绑定一个方法。当组件触发事件后,将调用这个方法。
  • …args:附加参数,会被抛出,由上述绑定的方法接收使用。

文档说:它是一个触发当前实例上的事件。附加参数都会传给监听器回调。

示例1:只配合一个事件名使用$emit('welcome'),无附加参数

// 定义组件
Vue.component('welcome-button', {
  template: `
    <button v-on:click="$emit('welcome')">  	// 【1】 $emit只使用了一个事件名welcome,无参数
      Click me to be welcomed
    </button>
  `
})
//使用组件
<div id="emit-example-simple">
  <welcome-button v-on:welcome="sayHi"></welcome-button> 	// 【2】 为事件名welcome绑定一个方法sayHi
</div>

//创建Vue实例
new Vue({
  el: '#emit-example-simple',
  methods: {
    sayHi: function () {	// 【3】 当组件触发事件后,执行welcome所绑定的方法sayHi
      alert('Hi!')
    }
  }
})

示例2:配合额外的参数使用

// 定义组件
Vue.component('magic-eight-ball', {
  data: function () {
    return {
      possibleAdvice: ['Yes', 'No', 'Maybe']
    }
  },
  methods: {
    giveAdvice: function () {
      var randomAdviceIndex = Math.floor(Math.random() * this.possibleAdvice.length)
      //【1】在组件绑定的方法giveAdvice中触发$emit事件,并抛出参数
      this.$emit('give-advice', this.possibleAdvice[randomAdviceIndex])  
    }
  },
  template: `
    <button v-on:click="giveAdvice">
      Click me for advice
    </button>
  `
})

// 使用组件
<div id="emit-example-argument">
  <magic-eight-ball v-on:give-advice="showAdvice"></magic-eight-ball> //【2】为$emit事件绑定一个方法showAdvice
</div>

// 创建Vue实例
new Vue({
  el: '#emit-example-argument',
  methods: {
    showAdvice: function (advice) {    // 【3】方法的参数 advice 用来接收 $emit 抛出的参数
      alert(advice)
    }
  }
})
  • 22
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue中,$emit和$on是用于实现组件间通信的两个方法。 $emit方法用于在当前实例上触发自定义事件。它可以接收一个事件名称作为第一个参数,以及可选的附加参数。例如,通过调用`this.$emit('test', 'Hello')`来触发名为"test"的自定义事件,并传递字符串"Hello"作为参数。 $on方法用于监听当前实例上的自定义事件。它接收两个参数,第一个参数是事件名称,第二个参数是一个回调函数。当触发该事件时,回调函数会被执行,并接收所有传入事件触发函数的额外参数。例如,通过调用`this.$on('test', function(msg){ console.log(msg) })`来监听名为"test"的自定义事件,并在事件触发时打印出传递的参数。 在给定的代码示例中,`this.$EventBus`是一个在Vue原型上注册的全局事件总线对象。通过将事件总线对象分配给`Vue.prototype.$EventBus`,我们可以在不同的组件中访问和使用它。其中,`new Vue()`创建了一个Vue实例并将事件总线对象赋值给`$EventBus`。然后,我们可以在组件中使用`this.$EventBus.$emit()`触发自定义事件,以及使用`this.$EventBus.$on()`监听自定义事件。 在header组件中,通过在created生命周期钩子函数中使用`this.$EventBus.$on()`方法监听名为"changeNum"的自定义事件。当"changeNum"事件被触发时,回调函数会执行,并将传递的参数赋值给headStr属性,从而更新组件中的显示内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值