vue之父子组件之间的通讯

本文介绍Vue.js中父子组件间的数据传递方法,包括父组件通过props向子组件传递数据及子组件通过$emit向父组件传递数据的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、自定义组件

子组件

<template>
    <div>
        
    </div>
</template>

<script>
    export default {
        
    }
</script>

父组件使用子组件

<template>
    <div>
        <my-child></my-child>
    </div>
</template>

<script>
    import MyChild from '@components/MyChild'

    export default {
        components: {
            MyChild
        }
    }
</script>

二、父子组件之间的通讯

1.父组件到子组件的通讯

子组件接收使用父组件的数据或方法

(1)通过props传递数据

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

<!-- 子组件 -->
<template>
    <div>
        <span>{{ parentMessage }}</span>
    </div>
</template>

<script>
    export default {
        props: {
            parentMessage: {
                type: String,
                default: '默认显示的信息'
                // require: true // 必填
            }
        }
    }
</script>
<!-- 父组件 -->
<template>
    <div>
        <my-child :parentMessage="message"></my-child>
    </div>
</template>

<script>
    import MyChild from '@components/MyChild'

    export default {
        components: {
            MyChild
        },
        data() {
            return {
                message: "父组件的消息"
            }
        }
    }
</script>

Prop 的类型type:
支持String、Number、Boolean、Array、Object、Date、Function、Symbol、任何自定义构造函数、或上述内容组成的数组。会检查一个 prop 是否是给定的类型,否则抛出警告。

单项数据流:

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

(2)通过$on传递父组件方法

监听当前实例上的自定义事件。事件可以由 vm.$emit 触发。回调函数会接收所有传入事件触发函数的额外参数。

子组件使用$emit 发送

<!-- 子组件 -->
<template>
    <div>
        <button @click="childEvent">点击我将子组件调用父组件方法</button>
    </div>
</template>

<script>
    export default{
        methods:{
        	childEvent(){
          		this.$emit('childEvent');
      		}
  		}
    }
</script>
<!-- 父组件 -->
<template>
    <div>
        <my-child @childEvent="parentMethod"></my-child>
    </div>
</template>

<script>
    import MyChild from '@components/common/MyChild'

    export default {
        components: {
            MyChild,
        },
        methods: {
            parentMethod() {
                alert(this.parentMessage)
            }
        }
    }
</script>

2.子组件到父组件的通讯

父组件接收使用子组件的数据或方法。

(1)通过$emit 传递父组件数据

与父组件到子组件通讯中的$on配套使用,可以向父组件中触发的方法传递参数供父组件使用。

<!-- 子组件 -->
<template>
    <div>
        <button @click="childEvent">点击我将子组件调用父组件方法</button>
    </div>
</template>

<script>
    export default{
        methods:{
        	childEvent(){
          		this.$emit('childEvent','data');
      		}
  		}
    }
</script>
<!-- 父组件 -->
<template>
    <div>
        <my-child @childEvent="parentMethod"></my-child>
    </div>
</template>

<script>
    import MyChild from '@components/common/MyChild'

    export default {
        components: {
            MyChild,
        },
        methods: {
            parentMethod(data) {
                alert(this.parentMessage + data)
            }
        }
    }
</script>

(2)通过refs获取

可以通过 ref 这个 attribute 为子组件赋予一个 ID 引用。

<base-input ref="usernameInput"></base-input>

现在在你已经定义了这个 ref 的组件里,可以使用refs来访问这个 实例

this.$refs.usernameInput
Vue 3.0 中,父子组件之间通讯可以通过 props 和 emit 实现。 1.件向子件传递数据: 在父件中使用子件时,可以通过 props 将数据传递给子件。具体实现如下: ```vue <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { data() { return { parentMessage: 'Hello from parent' } }, components: { ChildComponent } } </script> ``` 在子件中,可以通过 props 接收父件传递过来的数据。具体实现如下: ```vue <template> <div> {{ message }} </div> </template> <script> export default { props: { message: String } } </script> ``` 2.件向父件传递数据: 在子件中,可以使用 emit 触发一个自定义事件,并向父件传递数据。具体实现如下: ```vue <template> <div> <button @click="sendMessage">Send Message</button> </div> </template> <script> export default { data() { return { message: 'Hello from child' } }, methods: { sendMessage() { this.$emit('message', this.message) } } } </script> ``` 在父件中使用子件时,可以通过 v-on 监听子件触发的自定义事件,并在事件处理函数中获取子件传递过来的数据。具体实现如下: ```vue <template> <div> <child-component @message="handleMessage"></child-component> <div>{{ receivedMessage }}</div> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { data() { return { receivedMessage: '' } }, components: { ChildComponent }, methods: { handleMessage(message) { this.receivedMessage = message } } } </script> ``` 以上就是 Vue 3.0 中父子组件之间通讯的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值