美文网首页
简单易懂----Vue 组件之间的通信(父到子,子到父,同级)

简单易懂----Vue 组件之间的通信(父到子,子到父,同级)

作者: Vampire丶_L | 来源:发表于2019-01-23 16:49 被阅读0次

关于组件之间的通信主要是看业务,是父到子,还是子到父。以下的例子我会配上具体的应用情景。

情景一:

父组件传值给子组件(为了降低父组件复杂程度,往往会将表格,表单等进行组件化,抽离成单个的组件)

做法:子组件child:声明一个props属性

//对象形式
props: {
    editData: {
      type: Object
    }
 }
//字符串数组形式
props: ['rowData']

父组件:绑定子组件声明的那个属性

 <edit-manage :editData="manageEditData" ref="editProxy"></edit-manage>
 <eye-manage :rowData="eyeData"></eye-manage>

manageEditDataeyeData都是父组件data里的变量,这样我们就完成了父组件到子组件的传值。注意:这种传值方式的单向的,当父组件的数据变化会更新prop属性,完成数据的更新。

情景二:

子组件向父组件传值(子组件如果包含表单等需要填写的数据,在父组件中的提交操作需要其作为参数传递到后台)

做法一:
父组件直接取值:父组件通过this.$ref来获取子组件的数据
在父组件中引入子组件,通过给子组件添加ref属性,利用this.$ref对象来获取子组件的值,下面来一个demo看看这个this.$ref打印出来会是什么样子

<template>
  <div class="hello">
    <child ref="child"></child>
  </div>
</template>

<script>
import child from './child'
export default {
  name: 'HelloWorld',
  data () {
    return {
    }
  },
  components: {
    child
  },
  mounted () {
     console.log(this.$refs)
  }
}
</script>
<style lang="stylus" scoped>
</style>

看看控制台:

image.png
如果我们需要获取child子组件form表单的值,可以通过this.$ref['child']来获取child子组件data的任意值,来看看代码和控制台:
 mounted () {
    console.log(this.$refs['child'].child.name)
    console.log(this.$refs['child'].child.age)
  }

页面上的输入框:


image.png

控制台:


image.png

这样我们就可以获取到了

做法二:通过$emit()和v-on

先来看子组件child:

<template>
  <div>
    <button @click="save">保存</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      child:{
          name:'childname',
          age:11
      }
    }
  },
  methods:{
   save(){
       this.$emit('saveHandle',[this.child,1,2,3,4]) //传递一个数组
   }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="stylus" scoped>
</style>

父组件:

<template>
  <div>
    <child ref="child" v-on:saveHandle="save"></child>
  </div>
<template>
<script>
import child from './child'
export default {
  name: 'HelloWorld',
  data () {
    return {
    }
  },
  components: {
    child
  },
  methods:{
    save(data){
      console.table(data) //接收子组件child传过来的数据
    }
  }
}
</script>

看看控制台:


image.png

获取到子组件传递的值了就可以为所欲为了

相关文章

  • 简单易懂----Vue 组件之间的通信(父到子,子到父,同级)

    关于组件之间的通信主要是看业务,是父到子,还是子到父。以下的例子我会配上具体的应用情景。 情景一: 父组件传值给子...

  • Vue组件间的通信

    1.父组件到子组件通信 通过props属性来传递 2.子组件到父组件通信 通过Vue.$emit()方法 3.同级...

  • Vue.js--组件通信

    vue组件之间的通信包括三种: 1.父组件向子组件通信 2.子组件向父组件通信 3.同级组件之间的通信 首先,看一...

  • vue使用v-model实现父子组件间通信

    前言 vue父子组件之间的通信方式: 父组件到子组件:通过props传递数据; 子组件到父组件:通过自定义事件实现...

  • Vue 组件 / 通信

    子组件=》父组件 vue的组件之间的通信类似angular的父子层级之间通信,父组件获取子组件数据步骤大概如下: ...

  • vue Bus总线

    vue中我们经常遇到组件之间的通信,通常的通信方式有 父 → 子、子 → 父、兄弟组件 之间的通信。通常处理方式...

  • 老生常谈——vue组件之间通信

    老生常谈的组件之间通信 vue组件之间的通信细分为三种情况:兄弟组件之间的通信,父组件向子组件传递数据,子组件向父...

  • 2018.04月面试题

    vue相关: 1.组件之间的通信 父组件传给子组件用props子组件向父组件通信用$emit具体参照:https:...

  • react通信

    通信的几种方式 一般来说,react里边有几种常用的方式:父到子,子到父,兄弟组件之间的通信。 ===== 父向子...

  • React学习笔记(三)-组件通信

    父子组件的通信 1.父 => 子父组件向子组件的通信是通过props。较为简单,代码如下 如果父组件与子组件之间不...

网友评论

      本文标题:简单易懂----Vue 组件之间的通信(父到子,子到父,同级)

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