- 子组件通过$emit()触发事件
- 父组件通过v-on监听子组件事件
<body>
<div id="app">
<cpn @itemclick="cpnClick"></cpn>
</div>
<template id="cpn">
<div>
<button v-for="item in categories" @click="btnClick(item)"> {{item.name}} </button>
</div>
</template>
<script src="../vue.js"></script>
<script>
const cpn = {
template: '#cpn',
data() {
return {
categories: [
{id: 1, name: '篮球'},
{id: 2, name: '羽毛球'},
{id: 3, name: '乒乓球'},
{id: 4, name: '网球'},
]
}
},
methods: {
btnClick(item) {
this.$emit('itemclick', item) // 向父组件发送事件名称,父组件负责监听该事件
}
}
}
const app = new Vue({
el: '#app',
data: {
},
components: {
cpn
},
methods: {
cpnClick(item) { // 默认传递item
console.log('hi', item)
}
}
})
</script>
</body>
点击按钮时,输出'hi'以及item内容