Vue2.x 兄弟组件之间的数据传递

兄弟组件之间的数据传递

思路:创建三个组件分别是<my-aaa><my-bbb><my-ccc>,在<my-ccc>中接收<my-aaa><my-bbb>发送的数据,当改变<my-aaa><my-bbb>所发送的数据时,<my-ccc>接收的数据也随之改变

html

<body>
    <div id="box">
        <my-aaa></my-aaa>
        <my-bbb></my-bbb>
        <my-ccc></my-ccc>
    </div>
    <template id="aaa">
        <div>
            <input type="button" @click="changed" value="我是aaa的按钮">
        </div>
    </template>
    <template id="bbb">
        <div>
            <input type="button" @click="changed" value="我是bbb的按钮">
        </div>
    </template>
    <template id="ccc">
        <div>
            <h1>{{a}}</h1>
            <h1>{{b}}</h1>
        </div>
    </template>
</body>

script

需要在外部单放一个实例化对象,用于跟所有人说话。

就是传话用的,本身没有什么意义。

var vm = new Vue();

分别创建三个组件,两个传递数据,一个接收数据。

new Vue({
        el:‘#box‘,
        components:{
            "my-aaa":{
                data(){
                    return {
                        aMsg:"我是a的数据"
                    }
                },
                template:‘#aaa‘
            },
            "my-bbb":{
                data(){
                    return {
                        bMsg:‘我是b的数据‘
                    }
                },
                template:‘#bbb‘
            },
            "my-ccc":{
                template:‘#ccc‘,
            }
        }
    })

传递数据 ,需要用 $emit(‘key‘,value)

key:用什么名字传递

value:传递的数据

methods:{
    changed(){
        vm.$emit(‘a-msg‘,this.aMsg);
    }
}

接收数据,需要用 $on(‘key‘,(data)={})

key:接收数据的名字

data:可以随意定义,相当于一个回调函数

data(){
    return {
        a:‘暂无a的数据‘,
        b:‘暂无b的数据‘
    }
},
mounted(){
    vm.$on(‘a-msg‘,(data)=>{
        this.a = data;
    });
    vm.$on(‘b-msg‘,(data)=>{
        this.b = data;
    })
}

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>组件传递</title>
    <script src="bower_components/vue/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <my-aaa></my-aaa>
        <my-bbb></my-bbb>
        <my-ccc></my-ccc>
    </div>
    <template id="aaa">
        <div>
            <input type="button" @click="changed" value="我是aaa的按钮">
        </div>
    </template>
    <template id="bbb">
        <div>
            <input type="button" @click="changed" value="我是bbb的按钮">
        </div>
    </template>
    <template id="ccc">
        <div>
            <h1>{{a}}</h1>
            <h1>{{b}}</h1>
        </div>
    </template>
</body>
<script>
    var vm = new Vue();

    new Vue({
        el:‘#box‘,
        components:{
            "my-aaa":{
methods:{
    changed(){
        vm.$emit(‘a-msg‘,this.aMsg);
    }
},
                data(){
                    return {
                        aMsg:"我是a的数据"
                    }
                },
                template:‘#aaa‘
            },
            "my-bbb":{
                methods:{
                    changed(){
                        vm.$emit(‘b-msg‘,this.bMsg);
                    }
                },
                data(){
                    return {
                        bMsg:‘我是b的数据‘
                    }
                },
                template:‘#bbb‘
            },
            "my-ccc":{
                template:‘#ccc‘,
                data(){
                    return {
                        a:‘暂无a的数据‘,
                        b:‘暂无b的数据‘
                    }
                },
                mounted(){
                    vm.$on(‘a-msg‘,(data)=>{
                        this.a = data;
                    });
                    vm.$on(‘b-msg‘,(data)=>{
                        this.b = data;
                    })
                }
            }
        }
    })
</script>
</html>

原文地址:https://www.cnblogs.com/chillLife/p/11054884.html

时间: 2024-08-29 16:21:42

Vue2.x 兄弟组件之间的数据传递的相关文章

Vue 爬坑之路(二)—— 组件之间的数据传递

Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,components 文件夹下都是子组件. 一.父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据. 子组件部分: 这是 header.vue 的 HTML 部分,logo 是在 data 中定义的变量. 如果需要从父组件获取 logo 的值,就需要使用 props: ['lo

vue组件之间的数据传递

Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,components 文件夹下都是子组件. 一.父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据. 子组件部分: 这是 header.vue 的 HTML 部分,logo 是在 data 中定义的变量. 如果需要从父组件获取 logo 的值,就需要使用 props: ['lo

Vuex 组件之间的数据传递

在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/6266038.html 但是如果是大型项目,很多时候都需要在子组件之间传递数据,使用之前的方式就不太方便.Vue 的状态管理工具 Vuex 完美的解决了这个问题. 一.安装并引入 Vuex 项目结构: 首先使用 npm 安装 Vuex cnpm install vuex -S 然后在 main.js 中引入

react.js从入门到精通(五)——组件之间的数据传递

一.组件之间在静态中的数据传递 从上面的代码我们可以看出,两个组件之间的数据是分离,但如果我们有某种需求,将数据从一个组件传到另一个组件中,该如何实现? 场景设计: 将Home.js中的HomeData传递到MyScreen.js中 import React,{ Component } from 'react' import MyScreen from "./MyScreen"; class Home extends Component { constructor(props) { s

vue2.0 组件之间的数据传递

组件间的数据传递// 父组件<template><div class="order"><dialog-addpro v-on:closedialog="close" :proinfo="proinfo"></dialog-addpro></div></template><script>import daddpro from '../../daddpro' expo

在vue中通过使用$attrs实现组件之间的数据传递

组件之间传递数据的方式有很多种,之所以有这么多种方式,是为了满足在不同场景不同条件下的使用. 一般有三种方式: 通过 props 的方式向子组件传递(父子组件) vuex 进行状态管理 非父子组件的通信传递 Vue Event Bus,使用Vue的实例,实现事件的监听和发布,实现组件之间的传递 本文介绍的是使用$attrs的方式. 这个api是在2.4版本中添加的,那么为什么要添加这个特性呢? 看看官网是怎么解释的 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class

Vue(5)- 子父级组件之间的数据传递

父组件 向 子组件 传递数据 1 Parent.vue 文件 2 3 <template> 4 <div> 5 <h2>Parent Component</h2> 6 <p> 7 <Child :ParentToChild="ParentToChildMsg" /> 8 </p> 9 </div> 10 </template> 11 12 <script> 13 im

组件之间的通讯:兄弟组件之间的相互通讯(中央事件总线)

组件之间的通讯: 父->子:通过props,data属性, 子->父:通过派发事件 兄弟组件:中央事件总线(......data{ Bus:new Vue()}.....) 更为复杂的通讯:就是用vuex 关于兄弟组件之间的通讯官档上推荐使用中央事件总线,我们也确实是这样做的, 中央事件总线,其实就是在父组件data中在实例化话一个vue实例,用于管理组件之间的通讯 假设我们有一个组件A,和B,他们之间的要进行数据通讯,那么他们之间肯定要建立某种联系,这个联系人就是父组件,联系地址就是中央事件

ThreadLocal父子线程之间的数据传递问题

一.问题的提出 在系统开发过程中常使用ThreadLocal进行传递日志的RequestId,由此来获取整条请求链路.然而当线程中开启了其他的线程,此时ThreadLocal里面的数据将会出现无法获取/读取错乱,甚至还可能会存在内存泄漏等问题,下面用代码来演示一下这个问题. 普通代码示例: 并行流代码示例: 二.问题的解决 ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的Threa