最近在看vue的文档 好好学习中 vue中实现通过bus.js实现非父子组件之间的通信 简单明了 ,应用在商城网站上

一般在项目中,有时候我们需要在组件之间通信传值,  直接看代码吧

在实现之前,首先创建一个文件夹utils,  然后写一个文件名为bus.js, 内容如下

import Vue from  'vue'
const bus = new Vue()

export default bus

在index.vue中   

注明: 刚刚发现了一个bug,就是在页面切换回来的时候,值是有问题的,作出新的修改

<template>
    <div class="app">
        首页 <br>
        <button @click="getcount">累加</button>  
        <button @click="setcount">减少</button>  <br>
        数量:  <span>{{count}}</span>
    </div>
</template>
<script>
import bus from '@/utils/bus.js'
    export default {
        data(){
            return{
                count: 0,
            }
        },
        methods: {  //未修改之前的  
            getcount(){
                this.count++
                bus.$emit('count',this.count)  // 发送数据
            },
            setcount(){
                this.count--
                bus.$emit('count',this.count)
            }
        }
methods: { //修改好的代码
            getcount(){
                this.count++
                bus.$emit('count',this.count)  // 发送数据
                localStorage.setItem('count',this.count)
            },
            setcount(){
                this.count--
                bus.$emit('count',this.count)
                localStorage.setItem('count',this.count)
            }
        },
        created(){
            this.count = localStorage.getItem('count')
        }

    }
</script>

在另一个页面上通过bus.js传过来的值  进行接收并展示  我这次的是在APP.vue上得  

在app.vue

<template>
<div class="button_box">
        <div class="button">我的订单</div>
        <div class="button">购物车(<span>{{count}}</span>)</div>
        <div class="button">我的收藏</div>
    </div>
</template>

<script>
import bus from './utils/bus.js'  // 注意 两者都记得引入bus.js
export default {
  name: 'App',
  data(){
    return {
      count: 0
    }
  },
  created(){
    bus.$on('count',value=>{
      // console.log(value)  // 接收传过来的数据
      this.count = value
    })
  }
}
</script>

这样就可以实现传值了 

 效果图:

 

 

posted @ 2018-12-07 15:26  PinkYun  阅读(297)  评论(0编辑  收藏  举报