有时候,需要在父组件把数据传递给子组件,也有时候,需要把子组件的数据,传递给父组件。

这里先来研究第一个,父组件把数据传递给子组件。

这里使用props

参考vue.js官方介绍

https://cn.vuejs.org/v2/api/#props

 

props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。

父组件写一个点击事件,累计增加值。

<template>
    <div>
        <el-button @click="add">点击</el-button>
        <label>显示父组件的值</label>
        <son :i =i></son>
    </div>
</template>
<script>
import son from './son'
export default {
  data () {
    return {
      i: 0
    }
  },
  methods: {
    add () {
      this.i = this.i + 1
    }
  },
  components: {
    son
  }
}
</script>

子组件如下:使用props,定义一个变量

<template>
    <div>
        <label>1111</label>
        <el-input type="text" :value="i"></el-input>
    </div>
</template>
<script>
export default {
  props: {
    i: {
      type: Number,
      default: 0
    }
  }
}
</script>

父组件使用

<son :i =i></son>

:i 的意思是绑定子组件props里面的i变量。

=i 是绑定父组件的i变量。

 

效果如下:

Vue之父子组件通信_Vue

 ********************上面就完成了父组件传递数据给子组件*****************

下面开始新的玩法,子组件传递数据给父组件。

这里使用的方法教$emit

父组件如下:

<template>
    <div>
        <el-button @click="add">点击</el-button>
        <label>显示父组件的值</label>
        <son :i =i @sonadd="sonadd"></son>
        <label>显示子组建的值</label>
        <el-input type="text" :value="sonCount"></el-input>
    </div>
</template>
<script>
import son from './son'
export default {
  data () {
    return {
      i: 0,
      sonCount: 250
    }
  },
  methods: {
    add () {
      this.i = this.i + 1
    },
    sonadd (count) {
      console.log('sonadd ' + count)
      this.sonCount = count
    }
  },
  components: {
    son
  }
}
</script>

 

子组件如下:

<template>
    <div>
        <label>1111</label>
        <el-input type="text" :value="i"></el-input>
        <el-button @click="add">子组件传递给父组件</el-button>
    </div>
</template>
<script>
export default {
  data () {
    return {
      count: this.i
    }
  },
  props: {
    i: {
      type: Number,
      default: 0
    }
  },
  methods: {
    add () {
      this.count++
      console.log(this.count)
      this.$emit('sonadd', this.count)
    }
  }
}
</script>

 

注意事项:

Vue之父子组件通信_Vue_02

子组件调用的函数名为sonadd 参数为this.count

Vue之父子组件通信_Vue_03

父组件使用@sonadd 绑定子组件调用的函数,并写一个sonadd的函数来处理消息。

效果如下:

Vue之父子组件通信_Vue_04