Vue_(组件通讯)非父子关系组件通信

  Vue单项数据流  传送门

  Vue中不同的组件,即使不存在父子关系也可以相互通信,我们称为非父子关系通信

  我们需要借助一个空Vue实例,在不同的组件中,使用相同的Vue实例来发送/监听事件,达到数据通信的目的

  

  

  Learn

     一、单项数据流

  目录结构

  

  【每个demo下方都存有html源码】

一、单项数据流

  定义组件A和组件B,组件A和组件B同级关系,当点击<template-a>的button控件时,调用sendData函数,将template-a中的data数据发向template-b

    <template id="template-a">
        <div>
            <h1>my-component-a</h1>
            comA name : <span>{{name}}</span><br />
            <button @click="sendData">发送数据给comB</button>
            <hr />
        </div>
    </template>

    <template id="template-b">
        <div>
            <h2>my-component-b</h2>
            comB name : <span>{{nameB}}</span>
            <hr />
        </div>
    </template>

  coma绑定template-a模块组件,comb绑定template-b模块组件,要进行数据中转时候,一定要注意template-b模块组件中的this关键字

let comA = {
            template :  "#template-a",
            data(){
                return {
                    name : "AdataGary"
                }
            },
            methods : {
                sendData(){
                    vm.$emit(‘send-event-a‘, this.name);
                }
            }
        }

        let comB = {
            template :  "#template-b",
            data(){
                return {
                    nameB : ‘‘
                }
            },
            mounted(){
                /*vm.$on(‘send-event-a‘, function(value){
                    console.log(this);
                    this.nameB = value;
                });*/
                vm.$on(‘send-event-a‘, name => {
                    console.log(this);
                    this.nameB = name;
                })
            }
        }

  在Vue中注册申请

        let vm = new Vue({
            data : {
                msg : ‘Garydat‘
            }
        });
        new Vue({
            data : {

            },
            components : {
                "my-component-a" : comA,
                "my-component-b" : comB
            }
        }).$mount("#GaryId");

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Gary</title>
    </head>
    <body>
        <div id="GaryId">
            <my-component-a></my-component-a>
            <my-component-b></my-component-b>
        </div>
    </body>

    <template id="template-a">
        <div>
            <h1>my-component-a</h1>
            comA name : <span>{{name}}</span><br />
            <button @click="sendData">发送数据给comB</button>
            <hr />
        </div>
    </template>

    <template id="template-b">
        <div>
            <h2>my-component-b</h2>
            comB name : <span>{{nameB}}</span>
            <hr />
        </div>
    </template>

    <script type="text/javascript" src="../js/vue.js" ></script>
    <script type="text/javascript">

        let comA = {
            template :  "#template-a",
            data(){
                return {
                    name : "AdataGary"
                }
            },
            methods : {
                sendData(){
                    vm.$emit(‘send-event-a‘, this.name);
                }
            }
        }

        let comB = {
            template :  "#template-b",
            data(){
                return {
                    nameB : ‘‘
                }
            },
            mounted(){
                /*vm.$on(‘send-event-a‘, function(value){
                    console.log(this);
                    this.nameB = value;
                });*/
                vm.$on(‘send-event-a‘, name => {
                    console.log(this);
                    this.nameB = name;
                })
            }
        }

        let vm = new Vue({
            data : {
                msg : ‘Garydat‘
            }
        });
        new Vue({
            data : {

            },
            components : {
                "my-component-a" : comA,
                "my-component-b" : comB
            }
        }).$mount("#GaryId");

    </script>
</html>

Gary_non-fatherAndSon.html

原文地址:https://www.cnblogs.com/1138720556Gary/p/10549831.html

时间: 2025-01-08 06:37:32

Vue_(组件通讯)非父子关系组件通信的相关文章

Vue父子组件及非父子组件如何通信

1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: 子组件通过props来接收数据: 方式1: 方式2 : 方式3: 这样呢,就实现了父组件向子组件传递数据. 2.子组件与父组件通信 那么,如果子组件想要改变数据呢?这在vue中是不允许的,因为vue只允许单向数据传递,这时候我们可以通过触发事件来通知父组件改变数据,从而达到改变子组件数据的目的. 父组件: 3.非父子组件通信 如果2个组件不是父子组件那么如何通信呢?这时可以通过eventHub来实现

Vue最常用的组件通讯有三种:父-&gt;子组件通讯、子-&gt;父组件通讯,兄弟组件通讯.(template用的pug模板语法)

Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通讯,是通过props进行数据传递,并且具有这几个特性,单向传递,子组件接收的数据不可以更改,如果更改,会发出警告,每次父组件更新时,子组件的所有 prop 都会更新为最新值. 1 父组件 2 <template lang="pug"> 3 .father 4 Children(:name='msg

vue2.0父子组件以及非父子组件如何通信

1.父组件 >>> 子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg"></child> //这里必须要用 - 代替驼峰 </parent> data(){ return { msg: [1,2,3] }; } 子组件通过props来接收数据: 方式1: props: ['childMsg'] 方式2 : props: { chi

React 父子组件和非父子组件传值

零.this.props 可以接收到 外界的传值 和 此组件标签内部自定义的方法 例: <one vals={message} sendVal={this.handleReverse.bind(this)}></one> 此时在子组件中打印this.props this.props = { vals : '**', sendVal : fn } 由此我们可以进行父子组件之间传值 一.父传子 在子组件标签中用自定义属性进行传递,接收的时候通过this.props进行接收 /* 父组件

vue的父子组件以及非父子组件之间的通信方式

Vue组件通信 父传子  prop 自定义属性,将父亲的数据传给儿子 1. 在组件标签上使用自定属性 2. 在组件内部通过props来接收自定义属性 3. 子组件接收后既可以在组件里直接使用,不过只能用不能改 <wiz_code_mirror> //父组件 <body>  <div id='app1'>      <!-- 在tp1组件标签上使用 xixi自定义属性 -->    <tp1 :xixi='change'></tp1>

Vue父子组件和非父子组件传值问题

父组件跟子组件之间的传值(具体参考lonzhubb商城) 1.父组件传值给子组件形式,ifshop是要传的对象,右边ifshop代表要传的这个对象的数据 <v-select  :ifshop="ifshop"  :clickType="clickType" @close="close" @addShop="sureAddShop"></v-select> 2.子组件接收父组件的数据用props prop

vue非父子组件间通信

有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的Vue实例作为中央事件总线: 有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的 Vue 实例作为中央事件总线: var bus = new Vue() // 触发组件 A 中的事件 bus.$emit('id-selected', 1) // 在组件 B 创建的钩子中监听事件 bus.$on('id-selected', function (id) { // ... }) 在更多复杂的情况下,你应该考虑使用专门的 状态管

angularjs2中的非父子组件的通信

AngualrJs2官方方法是以@Input,@Output来实现组件间的相互传值,而且组件之间必须父子关系,下面给大家提供一个简单的方法,实现组件间的传值,不仅仅是父子组件,跨模块的组件也可以实现传值 /** *1.定义一个服务,作为传递参数的媒介 */ @Injectable() export class PrepService{ //定义一个属性,作为组件之间的传递参数,也可以是一个对象或方法 profileInfo: any; } /** *2.传递参数的组件,我这边简单演示,直接就在构

Vue组件通信之非父子组件传值

前言: 如果想要了解非父子关系的组件传值,最好是在了解父传子和子传父的基础上在来了解非父子传值可能会有更透彻的思路. 因为非父子传值是通过定义事件总线来代理实现父传子+子传父从而实现的传值方式. 这是我总结的父子传值相关的知识,可供参考: https://www.cnblogs.com/ViavaCos/p/11712131.html 然后大概回顾一下父子传值的过程: 根据上述信息可知,如果两个组件需要传递值那么需要这两个组件之间是父子关系才能传递数据. 那么如果有这样一个组件,既可以帮你传递数