$emit
用v-on绑定 用本体用$emit绑定子组件:increment中的办法
html
<template>
<div id="counter-event-example">
<p>{{ total }}</p>
<button-counter v-on:increment="incrementTotal"></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div>
</template>
<script>
export default{
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
}
</script>
子组件 $emit
<template>
<div>
<button v-on:click="increment">{{ counter }}</button>
</div>
</template>
<script>
data: function () {
return {
counter: 0
}
},
methods: {
increment: function () {
this.counter += 1
this.$emit('increment')
}
},
</script>
非父子组件通信
有时候非父子关系的组件也需要通信。在简单的场景下,使用一个空的 Vue 实例作为中央事件总线:
var bus = new Vue()
// 触发组件 A 中的事件
bus.$emit('id-selected', 1)
// 在组件 B 创建的钩子中监听事件
bus.$on('id-selected', function (id) {
// ...
})
网友评论