美文网首页
vue组件传值

vue组件传值

作者: 程序小小黑 | 来源:发表于2020-12-25 11:56 被阅读0次

父传子

通过props传递

父组件: <child value = '传递的数据' />

子组件: props['value'],接收数据,接受之后使用和data中定义数据使用方式一样

子传父

在父组件中给子组件绑定一个自定义的事件,子组件通过$emit()触发该事件并传值。

父组件: <child @receive = 'receive' />

子组件:  this.$emit('receive','传递的数据')

兄弟组件传值

  • 通过vuex
  • 父元素搭个桥即可
  • 通过中央通信 let eventBus = new Vue()

可以在main.js中添加实例
Vue.prototype.eventBus = new Vue()
在组件通过this.eventBus调用

A:methods :{ 函数{eventBus .$emit(‘自定义事件名’,数据)} 发送
B:created(){eventBus .$on(‘A发送过来的自定义事件名’,函数)} 进行数据接收

祖先后代 provide & inject

props一层层传递,爷爷给孙子还好,如果嵌套了五六层还这么写,感觉自己就是一个沙雕,所以这里介绍一个 稍微冷门的API, provice/inject,专门用来跨层级提供数据

// 祖先
<script>
import Child from '@/components/Child'
export default {
  name: "app",
  provide:{
    name:'vue'
  },
  components:{Child}
}
<script>
//子孙
<template>   
    <div>
        <h3>Grandson</h3>
        <p>
            祖先元素提供的数据 : {{name}}
        </p>
    </div>
</template>
<script>
export default {
    inject:['name']
}
</script>

但是provider和inject不是响应式的,如果子孙元素想通知祖先,就需要hack一下,Vue1中有dispatch和boardcast两个方法,但是vue2中被干掉了,我们自己可以模拟一下
原理就是可以通过this.$$parent和this.$children来获取父组件和子组件,可以通过递归实现,我们还可以挂载到Vue的原型链上

// 在main.js文件中写入
// $dispatch方法
Vue.prototype.$dispatch =  function(eventName, data) {
  let parent = this.$parent
  // 查找父元素
  while (parent ) {
    if (parent) {
      // 父元素用$emit触发
      parent.$emit(eventName,data)
      // 递归查找父元素
      parent = parent.$parent
    }else{
      break
    }
  }
}
// $boardcast方法
Vue.prototype.$boardcast = function(eventName, data){
  boardcast.call(this,eventName,data)
}
function boardcast(eventName, data){
  this.$children.forEach(child => {
    // 子元素触发$emit
    child.$emit(eventName, data)
    if(child.$children.length){
      // 递归调用,通过call修改this指向 child
      boardcast.call(child, eventName, data)
    }
  });
}

相关文章

  • Vue - 传值

    Vue 传值有两种:1)父组件向子组件传值(属性传值,Prop传值)2)子组件向父组件传值 一、父组件向子组件传值...

  • (VUE3) 四、组件传值(父子组件传值 & 祖孙组件传值 &v

    1.父子组件传值 vue2中的父子组件传值:父组件: 子组件: vue3中的父子组件传值: 还是用props接收父...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • 前端基础搬运工-VUE模块

    十、VUE模块 基础部分 1. Vue组件间传值 答: -[ ] 1.父子之间的传值 父组件向子组件传值通过p...

  • Vue父子组件通信和双向绑定

    本篇文章主要介绍父子组件传值,组件的数据双向绑定。 1. 基础父子组件传值 父子组件传值,这是Vue组件传值最常见...

  • 2019-03-13

    vue父子组件传值,(父组件向子组件传值用prop ,子组件向父组件传值:子组件调用父组件方法值以参数的方式传递)...

  • 2019-03-13

    vue父子组件传值,(父组件向子组件传值用prop ,子组件向父组件传值:子组件调用父组件方法值以参数的方式传递)...

  • vue2.0的三种常用传值方式,并且如何实现?

    vue2.0 组件传值方式有三种:父组件向子组件传值,子组件向父组件传值,非父子组件传值 : 父传子: 首先现在父...

  • Vue组件传值

    vue组件传值 一、父组件向子组件传值方式: 1. 子组件中定义props,父组件向子组件props进行传值。 2...

  • Vue 父组件向子组件传值

    Vue 父组件向子组件传值 demo代码 (vue.js ...

网友评论

      本文标题:vue组件传值

      本文链接:https://www.haomeiwen.com/subject/fysmnktx.html