为了账号安全,请及时绑定邮箱和手机立即绑定

Vue.js父子组件和非父子组件间的传值通信

标签:
Vue.js

[toc]

父子组件的传值通信

父组件向子组件传值

  • 父组件:

<template>
    <child :message="parentMessage"></child>
</template>

data () {    return {
        parentMessage: "this is a message from parent"
    }
}
  • 子组件:

<template>
    <p>{{message}}</p>
</template>/* 一般形式 */data () {
    props: ["message"]
}/* 指定接收类型 */data () {
    props: {
        message: {
            type: String, //接收类型
            default: "this is the default value" // 默认值
        }
    }
}

子组件向父组件传值

Note 子组件不能直接更改父组件中的内容,因此可以通过子组件触发事件来传值给父组件。

  • 父组件:

<template>
    <div class="root">
        /* 自动监听子组件注册的 getChildValue 事件*/        <child @getChildValue="receive"></child>
        
        <p>{{valueFromChild}}</p>
    </div></template>data () {
    return {
        valueFromChild: "defaultValue"
    }
},
methods: {
    receive (valueFromChild) {
        this.valueFromChild = valueFromChild
    }
}
  • 子组件:

<template>
    <button @click="sendValueToParent">click to send value to parent</button>
</template>

data () {    return {
        childValue: 'this is child Value'
    }
},
methods: {
    sendValueToParent () {        /* 将 childValue 传递给父组件 */
        this.$emit('getChildValue', this.childValue)
    }
}

非父子组件之间的传值通信

  1. 创建 eventBus.js

import Vue from 'vue'var bus = new Vue()export default bus
  1. 组件 A

<template>
    <div class="root">
        <button @click="sendMessageToB">click here to send a message to B</button>
    </div></template>import eventBus from '.../eventBus.js'

data () {
    return {
        message: "message from A"
    }
},
methods: {
    sendMessageToB () {
        eventBus.$emit('transfer', this.message); 
    }
}
  1. 组件 B

<template>
    <div class="root">{{messageFromA}}</div>
</template>

import eventBus from '.../eventBus.js'data () {    return {
        messageFromA: "defaultValue"
    }
},created () {
    eventBus.$on('transfer', function (message) {
        this.messageFromA = message
    })
}



作者:沙海飞鱼
链接:https://www.jianshu.com/p/75ff1773ce41


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消