码迷,mamicode.com
首页 > 其他好文 > 详细

vue 组件之间通信的多种方案(3)

时间:2020-12-02 12:36:35      阅读:9      评论:0      收藏:0      [点我收藏+]

标签:from   ons   工具   ide   div   全局   接收   nts   app   

三、封装全局公共 BUS 数据改变,触发监听方法

  1、utils 目录下 bus.js 文件代码示例:

import Vue from ‘vue‘
const Bus = new Vue()
export default Bus

  2、通信传递引用 bus 示例:

import bus from ‘@/utils/bus‘; // 引入

methods: {
  changValue() {
    bus.$emit(‘changeValue‘, ‘zs‘);      
  }  
}

  3、 通信接收方法触发 示例:

  import bus from ‘@/utils/bus‘;
  mounted() {
    bus.$on(‘changeValue‘, (e) => {
        console.log(e); // zs
      }
    });
  },

  PS: BUS 更适用于组件之间关联不大,或者层级嵌套比较深的组件之前传值

四、provide\inject 上级向下级单项传参

  这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。

  理解:只要上级组件提供provide属性,下级组件无论层级多深都可以通过inject 注入依赖  

  ps: 这种方式传递参数是不可响应的,当provide 中值的改变不会影响到inject的接收

  父组件示例:

<template>
  <div id="app">
    <child></child>
    <button type="button" @click="changeProvide">change</button>
  </div>
</template>

<script>
import Child from "@/components/Child";
export default {
  name: "App",
  provide: {
    name: ‘zs‘
  },
  components: {
    Child,
  },
  methods: {
    changeProvide() {
      this.$set(this._provided, ‘name‘, ‘ls‘)
      console.log(this._provided) // ls
    }
  }
};

  子组件示例:

<template>
  <div class="child-deep">
    <child-deep></child-deep>
  </div>
</template>

<script>
import ChildDeep from ‘@/components/ChildDeep‘
export default {
  name: "Child",
  components: {
    ChildDeep
  }
}
</script>

  最下级组件示例:

<template>
  <div class="child-deep">
    <button type="button" @click="getProvide">button</button>
  </div>
</template>

<script>
export default {
  inject: [‘name‘],
  methods: {
    getProvide() {
      console.log(this.name); // zs zs
    }
  }
}
</script>

五、其他通信方式

  1、引用 vuex 这个状态管理工具;

  2、子组件通过this.$parents获取上层组件变量与方法;

  3、父组件通过 ref 属性 this.$refs[ref] 获取子组件变量与方法。

vue 组件之间通信的多种方案(3)

标签:from   ons   工具   ide   div   全局   接收   nts   app   

原文地址:https://www.cnblogs.com/eightabs/p/14051564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!