vue非父子组件之间值传递

非父子之间通过一个空的vue实例作为事件总线,相当于一个中转站。这个中转站是所有组件都可以看到的,大家通过这个中转站接收和触发事件。

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:{

        eventHub:new Vue()

  },
  template: ‘<App/>‘,
  components: { App }
})

在main.js文件中,添加一个空的vue实例eventHub。该实例需要是全局的,因为要在各个组件之中使用,而在此定义可以作为一个全局变量。

在子组件中通过this.$root.eventHub获取该实例。

在组件A中:

<script>

export default {
  name: ‘header‘,
   data:function(){
     return {

     }
  },
  methods:{
     sbar:function(){

        this.$root.eventHub.$emit(‘showbar‘,[1]);
     }
  }
}
</script>

在组件B中:

<script>
export default {
  name: ‘slidebar‘,
  data:function(){
     return {
         bar:true
     }
  },  

  mounted:function(){
     this.$root.eventHub.$on(‘showbar‘,function(val){
         this.bar=true;
         console.log(val);

     }.bind(this))   //这里必须绑定this,否则报错。我也不知道为什么。
  },

  methods:{
     nobar:function(){
         this.bar=false;
     }
  }
}
</script>
时间: 2024-08-11 09:56:19

vue非父子组件之间值传递的相关文章

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

(一)props与$emit <!-这部分是一个关于父子组件之间参数传递的例子--> <!--父组件传递参数到子组件是props,子组件传递参数到父组件是用事件触发$emit--> <!OCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <sccipt src="js/vue.js" t

Vue非父子组件传值(Bus/总线/发布订阅模式/观察者模式)

我们在之前已经知道了父子传值.父组件传递过来了的值,在子组件通过props接受,然后就可以使用了. 也学过了隔代传值,均是通过props逐层传递实现.那么,兄弟节点之间怎么传值呢? 通过bus实现方式如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> &l

vue非父子组件间通信

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

vue组件之间值传递四种方法汇总

1.父组件获取子组件的数据和方法 $refs 子组件: <template> <div class="header"> <h3>{{ zz }}</h3> </div></template> <script>export default { name: 'cx', data () { return { zz: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' } }, methods: {

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

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

vue 非父子组件传值

1 <template> 2 <div id="news"> 3 4 我是新闻组件 5 <br> 6 7 <button @click="emitHome()">给Home组件广播数据</button> 8 9 <br> 10 </div> 11 12 </template> 13 14 15 <script> 16 //引入 vue实例 17 import

Vue之父子组件之间的传值

父组件,首先要挂载子组件 如果父组件传值给子组件,则 <transition mode="out-in"> <router-view  :applyList='applyList'  applyPath='flightBstrip'></router-view> </transition> 1.父组件挂载子组件的时候声明属性 applyList,applyPath.(applyList是变量,flightBstrip是字符串) 2.子组件

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

Vue组件~父子组件之间的通信(传值)

1.父组件向子组件传参 父组件中通过v-bind对要传参数的绑定:(例如) :dataSourceName:是在子组件中要用到的值 "ctpSaveEchartSetting.dataSourceId":是在父组件中要传的值 子组件中的接收通过props(数据值单项绑定的)进行接收:(例如) 注:在props中有的变量就不能再data中再定义,或通过监测.计算属性直接去改变,因为js中的对象和数组是引用对象,指向同一个内存空间,如果在子组件中改变props中的值会影响到父组件中的值的状