首页 > web前端 > Vue.js > 正文

Vue中父子组件间怎么通信?聊聊父传子和子传父的方法

青灯夜游
发布: 2021-11-30 19:41:40
转载
2858 人浏览过

Vue中父子组件间怎么通信?下面本篇文章就来带大家了解一下Vue父子组件通信,介绍一下父向子传值和子向父传值的方法,希望对大家有所帮助。

Vue中父子组件间怎么通信?聊聊父传子和子传父的方法

Vue父子组件

什么是父子组件?

在一个组件中引入另一个组件,被引入的就叫做子组件,因为vue的模块化,会把有公共的部分单独抽成一个模块,不会把所有页面内容写在一个vue文件下,因为模块化的原因,避免不了两个模块之间的通信问题,这时候就有了模块(组件)之间的数据传递问题。【相关推荐:《vue.js教程》】

Vue父子组件通信

在vue中经常会一个组件经常会用到另一个组件的数据或者方法,这时候就有了父子组件之间的通信问题

Vue 父传子

1.先看代码,讲解在下面

<body>
//父组件
<div id="app">
    <cpn3 :ctitle="title"></cpn3>
</div>
//子组件
<template id="cpn3">
    <div>
        <h1>{{ctitle}}</h1>
        <p>orange</p>
    </div>
</template>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
    //子组件
    Vue.component("cpn3", {
        template: "#cpn3",
        // 组件里的data是一个函数,必须要返回一个对象,变量写在返回对象里
        props: {
            ctitle: {
                type: String,
                default () {
                    return {}
                }
            }
        }
    })
	//父组件
    const app = new Vue({
        el: "#app",
        data: {
            title: &#39;orange&#39;
        },
        methods: {},

    })
</script>
</body>
登录后复制

讲解:
1.先写出基本的模板分离组件

2.在子组件中加入props属性,用对象方式,,在props里面可以写你需要传的参数,参数也用对象方式,代码比较清晰,

    //子组件
    Vue.component("cpn3", {
        template: "#cpn3",
        // 组件里的data是一个函数,必须要返回一个对象,变量写在返回对象里
        props: {
            ctitle: {
            //参数也使用对象形式,type传类型  default函数,是在找不到参数时返回一个值显示
                type: String,
                default () {
                    return {}
                }
            }
        }
    })
登录后复制

2.然后在父组件中加入需要的属性

//父组件
    const app = new Vue({
        el: "#app",
        data: {
        //这里的title就是要传入子组件的属性  在父组件中定义
            title: &#39;orange&#39;
        },
        methods: {},

    })
登录后复制

3.在父组件中绑定两个参数

 <div id="app">
	//可以理解为将父组件中title 赋值给 ctitle,这样子组件就可以使用父组件的data属性了
    <cpn3 :ctitle="title"></cpn3>
</div>
登录后复制

4.最后在在子组件中要使用子组件定义的属性名

//子组件
<template id="cpn3">
    <div>
    //这里的属性名为ctitle
        <h1>{{ctitle}}</h1>
    </div>
</template>
登录后复制

Vue 子传父

1.子传父的意思就是,,子组件内容传给父组件,,使父组件可以随时使用子组件传来的数据,使用方法为:自定义函数

1、首先我们来做一个仿淘宝侧边栏商品,点击或者鼠标移动到上面出现内容商品案例

1.png

2、以上面这个图片为例,我们来讲一下组件传递的子传父

2.1我们将子组件和父组件分开先,挨个讲 先来看看子组件代码

<!-- 子组件 -->
<template id="cpn">
    <div>
        <h1>{{ctitle}}</h1>
        <button v-for="item in list" @click="goodsclick(item)">{{item.name}}</button>
    </div>
</template>
<script>
Vue.component("cpn", {
        template: &#39;#cpn&#39;,
        //父传子 props   
        props: {
            ctitle: {
                type: String,
                //找不到数据时
                default () {
                    return {}
                }
            }
        },
        data() {
            return {
                list: [{
                    id: &#39;phone&#39;,
                    name: &#39;手机&#39;
                }, {
                    id: &#39;tv&#39;,
                    name: &#39;电视&#39;
                }, {
                    id: &#39;p&#39;,
                    name: &#39;家电&#39;
                }, {
                    id: &#39;computer&#39;,
                    name: &#39;电脑&#39;
                }, ]
            }
        },
        //子传父 自定义事件
        methods: {
            // 自定义事件
            goodsclick(item) {
                this.$emit(&#39;itemclick&#39;, item)
            }
        }
    })
    </script>
登录后复制

讲解:子组件就是写出一个组件(html)包装起来,并且可以随时使用, 也就相当于html一样的,只是打包起来而已(这么理解应该没什么问题)

1.子组件和vue一样有data,methods,这属性 所以在data中写一个数组,然后用v-for的方式遍历生成按钮 和正常写法没什么差别,然后写个函数,绑定点击事件,并且将item,也就是数组传入的对象传入函数,

<button v-for="item in list" @click="goodsclick(item)">{{item.name}}</button>
登录后复制

2.然后最重要,最关键的一步来了,就是在你绑定的点击事件函数中,发射一个自定义函数给父组件,就是发送给父组件

methods: {
            // 自定义事件
            goodsclick(item) {
            //itemclick就是自定义函数,并且将item也传过去给父组件
                this.$emit(&#39;itemclick&#39;, item)
            }
        }
登录后复制

2.png

这就是子组件写完,这是子组件的样式,上图所示

2、接下来讲讲父组件怎么接收子组件传来的自定义事件

<!-- 父组件 -->
<div id="app">
    <cpn :ctitle="title" @itemclick="cpnclick"></cpn>
</div>
<script>
//父组件    
    const app = new Vue({
        el: "#app",
        data: {
            title: "title",
        },
        methods: {
            cpnclick(item) {
                console.log("cpnclick", item);
            }
        }
    })
</script>
登录后复制

讲解一下:你写好了子组件就要调用,调用就是你的组件名作为标签即可,,这里是

<cpn :ctitle="title" @itemclick="cpnclick"></cpn>
登录后复制

在父组件中写一个函数然后在里面绑定从子组件传过来的自定义事件,这样就成功绑定子组件,这样就完成子组件传数据到父组件了

本章完

更多编程相关知识,请访问:编程入门!!

以上是Vue中父子组件间怎么通信?聊聊父传子和子传父的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:juejin.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板