vue2.0非父子间进行通讯

在vue中,父组件向之组件通讯使用的是props,子组件向父组件通讯使用的是$emit+事件,那非父子间的通讯呢,在官方文档上只有寥寥数笔,

概念很模糊,这个空的vue实例应该放在哪里呢,光放文档并没有明确的描述,经过查证一些其他的资料,发现其实这个非父子间的通讯是这么用的:

首先,这个空的实例需要放到根组件下,所有的子组件都能调用,即放在main.js下面,如图所示:

import Vue from ‘vue‘
import App from ‘./App‘
import router from ‘./router‘

Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
  el: ‘#app‘,
  router,
  data:{
    Hub:new Vue()
  },
  template: ‘<App/>‘,
  components: { App }
});

  我的两个组件分别叫做child1.vue,child2.vue,我现在想点击child1.vue里面的按钮来改变child2.vue里面的数值,这个时候我们需要借助一个$root的工具来实现:

child1.vue:

<template lang="pug">
  div this is child
    span(@click="correspond") 点击进行非组件之间的通信
</template>
<script>
  export default{
    methods: {
      correspond(){
          this.$root.Hub.$emit("change","改变")
      }

    }
  }
</script>

  

child2.vue:

<template lang="pug">
  div this is child2
    span {{message}}
</template>
<script>
  export default{
    data(){
      return {
        message: "初始值"
      }
    },
    created(){
      this.$root.Hub.$on("change", () => {
        this.message = "改变"
      })
    }
  }
</script>

  

此时就已经可以达到我们想要的效果啦。

原文地址:https://www.cnblogs.com/mmykdbc/p/8124566.html

时间: 2024-08-30 10:37:40

vue2.0非父子间进行通讯的相关文章

vue的父子组件间传值以及非父子间传值

Vue组件间的传值方式: 父传子 子传父 非父子间传值 1.首先父组件传值给子组件,使用bind绑定属性,然后在子组件用props接收属性值. //父组件 <template> <input type="text" /> <br/> <child :inputValue="inputValue"></child> </template> <script> import child f

vue2 调用非父子组件方法的方式

今天用vue2 折腾spa的时候,遇到了这样的一个问题,有两个组件A和B,A和B不是父子组件,但是我需要在B组件中调用A组件的方法,官方文档找不到合适的答案,网上的相关资料也很少(原谅我懒得去FQGoogle). 一番折腾之后,我想到ES6的基本语法,可以通过引入模块去调用方法,于是,我在B组件中以模块的方式引入了A组件,然后直接调用B组件的方法,成功了! 举个例子,A组件的methods里有一个add方法. 那我再B组件脚本开头引入 //B模块 import A from 'A的相对路径' 然

bus.js非父子组件之间通讯

1.bus.js文件: assets目录下 import Vue from 'vue' // 创建通讯实例 var bus = new Vue() export default bus 2.在需要通讯的页面引入: import Bus from '@/assets/common/bus' 3.在数据发起方发送: Bus.$emit('getCode',this.openDialog1.groupid) 4.数据接收方获取:mounted里 Bus.$on('getCode', function

bus(总线传值-非父子间传值)

bus.js import Vue from 'vue' export default new Vue App.vue <template> <div id="app"> <button @click="passMsg">传你</button> <my-parent></my-parent> </div> </template> <script> import

vuex非父子组件间改值

最近在用vue写单页面项目嘛,然后就有遇到这问题啦,看了很多参考,要么繁琐的一塌糊涂,要么就是传值并不是改值,下面我述说下方法,最清晰的简单demo 父子间用props 非父子间用vuex store(store/index.js) state: { x:66 }, mutations:{ add:function(state,x){//这边的x来自于a.vue state.x=1+state.x; } }......... a.vue 先引用过来store(import { store } f

Vue2.0笔记——组件2

组件组合 父子组件的通信 组件 A 在它的模板中使用了组件 B.它们之间必然需要相互通信:父组件可能要给子组件下发数据,子组件则可能要将它内部发生的事情告知父组件. 首先,需要在Vue实例里定义一个组件,设置data,然后在这个组件里再添加一个conponents选项,注意不要添错位置.示例: <div id="app"> <my-father></my-father> </div> //父组件的模板 <template id=&q

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

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

Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

Vue常用的三种传值方式有: 父传子 子传父 非父子传值 引用官网的一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息 1. 父组件向子组件进行传值 父组件: <template> <div> 父组件: <input type="text" v-model="name"> <!-- 引入子组件 --> <child :abc=

Vue2.0 实战项目(五) 组件间通信的方法

Vue组件之间通信分为三种情况:父组件向子组件通信.子组件向父组件通信.兄弟组件间通信. 一.父组件向子组件通信 通过props可以将值传递给子组件 <!-- 父组件 --><template> <div id="app"> <!-- 父子组件间通信 --> <child :message="toChildMsg"></child> </div> </template>