zoukankan      html  css  js  c++  java
  • vue中bus的使用

    新建一个bus.js文件,并在main.js引入并全局使用它

    import Vue from 'vue'
    
    const bus = new Vue({
      data: {
        number: 1
      }
    })
    
    export default {
      install() {
        Object.defineProperty(Vue.prototype, '$bus', {
          value: bus
        });
      }
    }

    bus.vue组件,父组件派发事件,累加bus中number的值

    <template>
      <div class="sdktest">
        <ul>
          <li class="sdktest-item" @click="addNum">父组件派发事件----点击增加bus(number)------{{ $bus.number }}</li>
          <bus-child></bus-child>
        </ul>
      </div>
    </template>
    
    <script>
      import BusChild from './components/bus-child'
      export default {
        name: "index",
        components: {
          BusChild
        },
        methods: {
          addNum() {
            this.$bus.$emit('addNum',this.$bus.number++);
          }
        }
      }
    </script>
    
    <style scoped>
      .sdktest {
        overflow: hidden;
        background-color: #fff;
        font-size: 36px;
      }
      .sdktest-item {
         560px;
        /*height: 80px;*/
        margin: 40px auto;
        border: 1px solid #eee;
        border-radius: 10px;
        background-color: #3ec7e7;
        color: #fff;
        text-align: center;
        line-height: 80px;
      }
      .sdktest-item:nth-child(2n) {
        background-color: #42cd56;
      }
    </style>

    bus-child组件,子组件监听事件,监听bus中number的值

    <template>
      <div class="sdktest">
        <ul>
          <li class="sdktest-item">子组件监听事件---number:{{ $bus.number}}</li>
        </ul>
      </div>
    </template>
    
    <script>
      export default {
        name: "bus-child",
        mounted() {
          this.$bus.$on('addNum',(payload) => {
            console.log(payload);
          });
        }
      }
    </script>
    
    <style scoped>
      .sdktest {
        overflow: hidden;
        background-color: #fff;
        font-size: 36px;
      }
      .sdktest-item {
         560px;
        height: 80px;
        margin: 40px auto;
        border: 1px solid #eee;
        border-radius: 10px;
        background-color: #3ec7e7;
        color: #fff;
        text-align: center;
        line-height: 80px;
      }
      .sdktest-item:nth-child(2n) {
        background-color: #42cd56;
      }
    </style>

    页面展示

    局部使用,不注册在全局

    在页面目录下建一个bus.js文件,该文件只导出一个空的不挂载的vue实例

    import Vue from 'vue'
    
    const bus = new Vue();
    
    export default bus;

    在同一目录下建一个index.vue组件,该组件引入bus,然后利用bus.$emit方法派发事件

    <template>
      <div class="sdktest">
        <ul>
          <li class="sdktest-item" @click="add">(父组件)点击</li>
          <middle-child></middle-child>
        </ul>
      </div>
    </template>
    
    <script>
      import bus from './bus.js'
      import MiddleChild from './components/middle-child'
      export default {
        name: "index",
        data() {
          return {
            num: 1
          };
        },
        components: {
          MiddleChild
        },
        methods: {
          add() {
            bus.$emit('add', this.num++);
          }
        }
      }
    </script>
    
    <style scoped>
      .sdktest {
        overflow: hidden;
        background-color: #fff;
        font-size: 36px;
      }
      .sdktest-item {
         560px;
        /*height: 80px;*/
        margin: 40px auto;
        border: 1px solid #eee;
        border-radius: 10px;
        background-color: #3ec7e7;
        color: #fff;
        text-align: center;
        line-height: 80px;
      }
      .sdktest-item:nth-child(2n) {
        background-color: #42cd56;
      }
    </style>

    建一个middle-child.vue子组件,监听父组件派发过来的事件

    <template>
      <div class="sdktest">
        <ul>
          <li class="sdktest-item">子组件监听------{{ num }}</li>
        </ul>
      </div>
    </template>
    
    <script>
      import bus from '../bus.js'
      export default {
        name: "index",
        data() {
          return {
            num: 0
          };
        },
        mounted() {
          bus.$on('add',(payload) => {
            this.num = payload;
          });
        }
      }
    </script>
    
    <style scoped>
      .sdktest {
        overflow: hidden;
        background-color: #fff;
        font-size: 36px;
      }
      .sdktest-item {
         560px;
        /*height: 80px;*/
        margin: 40px auto;
        border: 1px solid #eee;
        border-radius: 10px;
        background-color: #3ec7e7;
        color: #fff;
        text-align: center;
        line-height: 80px;
      }
      .sdktest-item:nth-child(2n) {
        background-color: #42cd56;
      }
    </style>

    页面展示

  • 相关阅读:
    架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题
    西安大唐提车游记——感受古都容颜
    架构设计:系统存储(9)——MySQL数据库性能优化(5)
    架构设计:系统存储(8)——MySQL数据库性能优化(4)
    架构设计:系统存储(7)——MySQL数据库性能优化(3)
    架构设计:系统存储(6)——MySQL数据库性能优化(2)
    全班成绩录入系统
    直接选择排序
    冒泡排序
    直接插入排序
  • 原文地址:https://www.cnblogs.com/ltog/p/14303121.html
Copyright © 2011-2022 走看看