Vue 父子组件之间的数据通信--props,$emit

首先是父组件里面的数据传递到子组件
这里用props,props有支撑物的意思,可以理解为桥梁。props要写在自组件里面。

先定义一个子组件,在组件中注册props

<template>
    <div>
        <div>{{message}}(子组件)</div>
    </div>
</template>
<script>
export default {
    props: {
        message: String  //定义传值的类型<br>    }
}
</script>
<style>
</style>


在父组件中,引入子组件,并传入子组件内需要的值

<template>
    <div>
        <div>父组件</div>
        <child :message="parentMsg"></child>  
    </div>
</template>
 
<script>
 
import child from './child'  //引入child组件
export default {
    data() {
            return {
                parentMsg: 'a message from parent'  //在data中定义需要传入的值
            }
        },
        components: {
            child
        }
}
</script>
<style>
</style>

注:这种方式只能由父向子传递,子组件不能更新父组件内的data

接下来是子组件的数据传递到父组件
这里用到了$emit ,emit有发射发出的意思,这就不难理解了

tips: App.vue 父组件 / Hello.vue 子组件

父组件里面的内容
<!–App.vue :–>

<template>
  <div id="app">
    <hello @newNodeEvent="parentLisen" />
  </div>
</template>
<script>
 import hello from './components/Hello'
 export default {
  name: 'app',
  'components': {
   hello
  },
  methods: {
   parentLisen(evtValue) { 
    //evtValue 是子组件传过来的值
    alert(evtValue)
   }
  }
 }
</script>

子组件里面的内容
<!–Hello.vue :–>

<template>
  <div class="hello">
    <input type="button" name="" id="" @click="chilCall()" value="子调父" /> 
  </div>
</template>
<script>
 export default {
  name: 'hello',
  'methods': {
   chilCall(pars) {
    this.$emit('newNodeEvent', '我是子元素传过来的')
   }
  }
 }
</script> 

$emit通过调用父的方法的方式完成了子向父的数据传递

    原文作者:Robert
    原文地址: https://segmentfault.com/a/1190000015234117
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞