父子组件之间的通信

  • 父组件A通过绑定的形式 v-bind 或者直接传入的方式给子组件B传递数据,子组件B 通过props 进行接收。
  • 子组件B通过$emit的形式触发父组件A中的事件,通过事件传递数据。

# 1.父组件向子组件传值

<!--父组件-->
<template>
<div>
    我是父组件A
    <B :msg="arrayA"></B>  <!--通过v-bind形式向子组件传递数据-->
</div>
</template>
<script>
import B from '../components/B'
export default {
    components:{ B },
    data() {
        return {
            arrayA:['我是' , '父组件'  , '传递'  , '过来的' , '数组']
        }
    },
}
</script>
<!--子组件-->
<template>
    <div>
        我是子组件B
        <ul v-for="(item , index ) in msg" :key="index">
            <li>{{item}}</li>
        </ul>
    </div>
</template>
<script>
export default {
    props:['msg'], // 用来接收父组件传递过来的数据
}
</script>

TIP

总结:父组件通过props向下传递数据给子组件,这里使用的是props的数组的形式,严格讲应该要使用对象的形式标明类型,这里暂时不考虑,以后会专门针对props做深入理解。

# 2.子组件向父组件传值(事件的形式)

  • 我们先在父组件A中给子组件B绑定一个事件
  • 然后给子组件中的按钮绑定一个事件,用这个事件来触发父组件上的事件,通过这种形式传参
<!--父组件-->
<template>
    <div>
        我是父组件A 
        <h2>{{title}}</h2>
        <B @changeTitle="changeTitle"></B>  <!-- 在父组件中,给子组件绑定一个changeTitle事件-->
    </div>
</template>
<script>
import B from '../components/B'
export default {
    components:{ B },
    data() {
        return {
            title:"中国"
        }
    },
    methods: {
        changeTitle(val) {
            this.title = val;
        }
    }
}
</script>
<!--子组件-->
<template>
    <div>
        我是子组件B
        <button @click="change">向父组件传值</button>
    </div>
</template>
<script>
export default {
    methods:{
        change() {
            this.$emit('changeTitle' , '崛起');  // 子组件通过 this.$emit(事件名 , 参数) 向父组件传值
        }
    }
}
</script>

总结:子组件通过触发父组件绑定的事件的形式向父组件传递参数,this.$emit(事件名 , 参数)。

Last Updated: 12/7/2020, 3:08:32 PM