Vue父子组件之间的传值

Posted bushui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue父子组件之间的传值相关的知识,希望对你有一定的参考价值。

父组件向子组件传递数据

定义父子组件的模板

<!--父组件模板-->
<div id="app">
    <!--把父组件的msg和str,传给组件cmsg和cstr-->
    <cpn :cmsg="msg" :cstr="str"></cpn>
</div>

<!--子组件模板-->
<template id="mycpn">
    <!--组件里,最好有一个div作为根元素-->
    <div>
        <h2>{{cstr}}</h2>
        <ul>
            <li v-for="(item,index) in cmsg">{{item}}</li>
        </ul>
    </div>
</template>

父传子通常使用props,我们只需要在子组件使用props

// const cpn = {template:"",props:{}};//写法跟Vue.extend不同,内容一样
    const cpn = Vue.extend({//设置子组件
        template:"#mycpn",
        props:{//在子组件定义cstr和cmsg属性
            cstr:{
                type:String,//默认String类型
                default() {//默认值
                    return "";
                }
            },
            cmsg:{
                type: Array,
                default() {
                    return [];
                }
            }
        }
    });

    //父组件
    const app = new Vue({
        el:"#app",
        data() {
            return {//定义属性,传值给子组件
                str:"这里是父组件传值给子组件",
                msg:["传值1","传值2","传值3","传值4"]
            }
        },
        components:{//注册组件
            cpn
        }
    })

注:html 中的 attribute 名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名

 

 

子组件向父组件传递数据

定义父子组件的模板

<!--父组件模板-->
<div id="app">
    <!-- itemclick是子组件$emit自定义事件,
         btn是父组件事件,
        不写参数默认传递cbtn的item
     -->
    <cpn @itemclick="btn"></cpn>
</div>

<!--子组件模板-->
<template id="mycpn">
    <div>
        <button v-for="(item,index) in cmsg" @click="cbtn(item)">{{item.name}}</button>
    </div>
</template>

子传父使用$emit

//设置子组件
    const cpn = {
        template:"#mycpn",
        data(){
            return {
                cmsg:[
                    {
                        id: ‘1‘,
                        name: ‘热门推荐‘
                    },
                    {
                        id: ‘2‘,
                        name: ‘手机数码‘
                    },
                    {
                        id: ‘3‘,
                        name: ‘家用家电‘
                    },
                    {
                        id: ‘4‘,
                        name: ‘电脑办公‘
                    }
                ]
            }
        },
        methods: {
            cbtn(item) {
                //定义itemclick事件,通过$emit传值
                this.$emit(‘itemclick‘, item)
            }
        }
    }

    //父组件
    const app = new Vue({
        el:"#app",
        methods:{
            btn(item) {//获取子组件的值
                console.log(item);
            }
        },
        components:{
            cpn
        }
    });

 

以上是关于Vue父子组件之间的传值的主要内容,如果未能解决你的问题,请参考以下文章

Vue父子组件之间的传值

Vue父子组件之间的传值

Vue父子组件之间的传值

Vue之父子组件之间的传值

vue父子组件之间的传值

Vue--父子组件之间的传值