Vue初学18-父子组件间的数据传递-子传父

父子组件间的数据传递,父传子通过属性props,子传父通过事件$emit

应用场景如下:子组件有一个列表,子组件的列表被点击后,将被点击的列表项数据传递给父组件。

组件的数据通过data()函数返回,生成列表如下:

    <div id="app">
        <mycpn></mycpn>
    </div>
    <script src="../js/vue.js"></script>
    <template id="cpn">
        <div>
            <h2>{{title}}</h2>
            <ul>
                <li v-for="item in lists">{{item.name}}</li>
            </ul>
        </div>
    </template>
    <script>

        //相当于vue的子组件
        const mycpn={
            template:'#cpn',
            data(){
                return {
                    title: '产品列表',
                    lists:[
                        {'num':'1','name':'家用电器'},
                        {'num':'2','name':'男装'},
                        {'num':'3','name':'女装'}
                    ]
                }
            }
         }
        //创建并注册组件
        Vue.component('mycpn',mycpn);
        //vue相当于父组件
        const vue = new Vue({
            el:"#app",
            components:{
                mycpn:mycpn
            }
        });
    </script>

效果如下:

列表绑定click事件,并通过$emit传递给父组件,$emit('事件名','参数') ,事件名是父组件接收时要注册的事件名称,参数是要传递给父组件的参数。完整代码如下所示:父组件根据$emit传递的数据,注册@itemclick事件,接收参数,并将参数在控制台打印。

 <div id="app">
        <mycpn @itemclick="cpnclick"></mycpn>
    </div>
    <script src="../js/vue.js"></script>
    <template id="cpn">
        <div>
            <h2>{{title}}</h2>
            <ul>
                <li v-for="item in lists" @click="itemClick(item)">{{item.name}}</li>
            </ul>
        </div>
    </template>
    <script>

        //相当于vue的子组件
        const mycpn={
            template:'#cpn',
            data(){
                return {
                    title: '产品列表',
                    lists:[
                        {'num':'1','name':'家用电器'},
                        {'num':'2','name':'男装'},
                        {'num':'3','name':'女装'}
                    ]
                }
            },
            methods:{
                itemClick(item){
                    this.$emit('itemclick',item)
                }
            }
         }
        //创建并注册组件
        Vue.component('mycpn',mycpn);
        //vue相当于父组件
        const vue = new Vue({
            el:"#app",
            components:{
                mycpn:mycpn
            },
            methods:{
                cpnclick(item){
                    console.log(item)
                }
            }
        });
    </script>

点击家用电器,效果如下所示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值