子传父【自定义事件 ,$emit】

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="">
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>

<body>
    <template id='cpn'>
        <div>
            <h3>目标:将被点击的按钮item传递给父组件</h3>
            <button v-for="item in categories" @click="btnclick(item)">{{item.name}}</button>
        </div>
    </template>

    <div id='app'>
        <!-- //没有传递参数,但是默认传递一个实参item,由$emit处传递 -->
        <cpn @item-click="cpnclick"></cpn>
    </div>

    <script>
        //子组件
        const cpn = {
            //外部模板
            template: '#cpn',
            data() {
                return {
                    categories: [
                        { id: 'a', name: '推荐' },
                        { id: 'b', name: '数码' },
                        { id: 'c', name: '家电' },
                        { id: 'd', name: '办公' }
                    ]
                }
            },
            methods: {
                btnclick(item) {
                    //发送一个名为item-click的事件,再传递一个参数item
                    this.$emit('item-click',item);
                }
            }
        }
        const vm = new Vue({
            el: '#app',
            data: {
            },
            //注册子组件
            components: {
                cpn
            },
            methods: {
                cpnclick(item) {
                    console.log('cpnclick',item);
                }
            }
        })
    </script>
</body>

</html>
原文地址:https://www.cnblogs.com/carry-2017/p/11289868.html