美文网首页
Vue父子组件通信

Vue父子组件通信

作者: 辰宇26 | 来源:发表于2019-08-14 11:46 被阅读0次

父子组件通信

父组件通过设置子组件的props传递数据给子组件,子组件通过$emit发送消息给父组件。

组件及实现

子组件实现一个弹框,父组件通过传递变量控制子组件的显示和隐藏。

代码实现如下。
父组件:

<template
    <el-button type="primary" icon="el-icon-plus" @click="open">打开</el-button>
    <child-dialog :visible="visible" @updateVisible="handleVisible">
    </child-dialog>
</template>

<script>

import ChildDialog  from './ChildDialog'

export default {
    name: 'ParentDialog',
    components: {
        ChildDialog
    },
    data: () => {
        return {
            visible: false
        }
    },
    methods: {
        open:function() {
            this.visible = true;
            },
        handleVisible: function(v) {
            this.visible = v;
        }
    }
}
</script>

子组件:

<template>
<el-dialog :visible="visible" @close="close">
</el-dialog>

</template>

<script>
export default {
    name: "ChildDialog",
    props: ["visible"],
    methods: {
        close: function() {
            this.$emit("updateVisible", false);
        }
    }
}
</script>

父组件传递数据到子组件: 点击打开按钮,调用open函数,父组件设置visibletrue, 父组件传递值到子组件,子组件弹框展示。
子组件传递数据到父组件: 关闭子组件弹框,调用close函数,函数调用this.$emit("updateVisible", false),父组件接收到updateVisible事件,调用父组件函数handleVisible,修改父组件中的数据。

.sync简化实现

在Vue 2.3.0版本,添加了.sync,可以简化流程。
修改父组件实现:

<template
    <el-button type="primary" icon="el-icon-plus" @click="open">打开</el-button>
-    <child-dialog :visible="visible" @updateVisible="handleVisible">
+    <child-dialog :visible.sync="visible" >
     </child-dialog>
</template>

<script>

import ChildDialog  from './ChildDialog'

export default {
    name: 'ParentDialog',
    components: {
        ChildDialog
    },
    data: () => {
        return {
            visible: false
        }
    },
    methods: {
        open:function() {
            this.visible = true;
            },
-        handleVisible: function(v) {
-            this.visible = v;
-        }
    }
}
</script>

子组件实现:

<template>
<el-dialog :visible="visible" @close="close">
</el-dialog>

</template>

<script>
export default {
    name: "ChildDialog",
    props: ["visible"],
    methods: {
        close: function() {
-           this.$emit("updateVisible", false);
+           this.$emit("update:visible", false);
        }
    }
}
</script>

.sync主要简化了$emit发送事件类型,变为update:name,父组件不在需要手动实现接收事件的处理。

相关文章

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • vue2中eventbus遇到的坑

    前言 vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数...

  • Vue事件总线(EventBus)使用详细介绍

    前言 vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数...

  • Vue事件总线(EventBus)

    vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过props向下传数据给子组件...

  • VUE - EventBus

    vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数据给子...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • 09-生命周期及非父子组件间的通信

    一. Vue生命周期 二、生命周期代码 三、非父子组件通信 vue中非父子组件通信需要借助一个空的vue实例,案...

  • Vue组件通信

    Vue 组件之间的通信,通常我们遇到的都是父子组件之间的通信 一、父子组件传参 子组件定义 Props 属性; 父...

网友评论

      本文标题:Vue父子组件通信

      本文链接:https://www.haomeiwen.com/subject/cucgjctx.html