• 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>

    页面展示

  • 相关阅读:
    mysql把一个表的字段update成另一个表的字段根据id
    1月房地产企业销售TOP100出炉 万科重回第一
    别拿学历说事,这些天王中学没毕业,最低的是成龙
    马云:未来经济形势很艰难,需要企业家挺身而出
    私有云与公有云区别,公有云不可能统一天下
    除了首付,购房预算还须有这7项才能买到房!
    房产交易中的10个非典型问题 你肯定不懂!
    几个常用快速无损压缩算法性能比较
    ValueTask
    Mobaxterm
  • 原文地址:https://www.cnblogs.com/ltog/p/14303121.html
Copyright © 2020-2023  润新知