props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中。
我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成。
什么时候需要自定义事件呢?
当子组件需要向父组件传递数据时,就要用到自定义事件了。
我们之前学习的v-on不仅仅可以用于监听DOM事件,也可以用于组件间的自定义事件。
自定义事件的流程:
在子组件中,通过$emit()来触发事件。
在父组件中,通过v-on来监听子组件事件。
1 <div id="app">
2 <cnp @itemclick="cnpClick"></cnp>
3 </div>
4
5 <template id="cnp">
6 <div>
7 <button v-for="item in catgories" @click="btnclick(item)">
8 {{item.name}}
9 </button>
10 </div>
11 </template>
12
13 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
14 <script>
15 const cnp = {
16 template: '#cnp',
17 data () {
18 return {
19 catgories: [
20 {id: 'aaa', name: '热门推荐'},
21 {id: 'bbb', name: '手机数码'},
22 {id: 'ccc', name: '家用办公'},
23 {id: 'ddd', name: '居家用品'}
24 ]
25 }
26 },
27 methods: {
28 btnclick (item) {
29 // console.log(item)
30 this.$emit('itemclick', item)
31 }
32 }
33 }
34
35 const app = new Vue ({
36 el: '#app',
37 data: {
38 message: 'aaaaa'
39 },
40 components: {
41 cnp
42 },
43 methods: {
44 cnpClick (item) {
45 console.log(item)
46 }
47 }
48 })
49 </script>