Vue非父子组件传值方式。

项目结构:

 

 

1.事件总线方式:

①.先建util目录,然后再目录里新建bus.js文件,bus.js文件内容:

//非父子组件传值之事件总线。
//先建一个bus.js文件,然后在需要传递信息的地方引入。
//import bus from './bus.js'
//类似C#中定义一个类,然后实例化这个类,然后引用。
import Vue from 'vue'

export default new Vue;

②.在需要传递信息的组件中引入bus.js,这里是从APP.vue组件向Child.vue组件传递信息,然后要发送数据到Child.vue组件中。

传递信息使用 bus.$emit("方法名"),接收信息的组件中使用bus.$on("方法名",callback)监听
<template>
  <div id="app">
   <button @click="sendmsg">bus走你</button>
   <m-parent></m-parent>
   <router-view></router-view>
    </div>
    <!-- <router-view/> -->
</template>
<script>
//引入组件
import MParent from './views/Parent'

//从app.vue 往 Child.vue中传递信息。
import bus from './util/bus';
export default({
 components: {
   MParent,//注册组件。
 },
 methods: {
   sendmsg() {
     bus.$emit('appmsg','I am from App.vue');
   }
 },
})
</script>
<style>

</style>

③.在Child.vue组件中引入bus.js,然后监听bus.$on();

<template>
    <div>
        <h3>child</h3>
        <h4>{{msg}}</h4>
        <h6>{{childmsg}}</h6>
        <button @click="sendmsg">传给父亲</button>
    </div>
</template>

<script>
import bus from '../util/bus';
    export default {
        //使用 props 属性接收父组件传过来的值。
        props: {
            msg: {
                type: String,
                default: ''
            },
        },
        methods: {
            sendmsg() {
                this.$emit('showmsg','from child msg');//触发父组件监听的showmsg(),并且传值。
            }
        },
        data() {
            return {
                childmsg: ''
            }
        },
        mounted () {
            bus.$on('appmsg',(val)=>{
                this.childmsg=val;
            });
        },
    }
</script>

<style  scoped>

</style>
View Code

 

posted @ 2021-04-20 19:29  longdb  阅读(906)  评论(0编辑  收藏  举报