Vue父子组件传值, 父传子,子传父, bus总线

本文详细介绍了Vue.js中父子组件间的通信方法,包括父组件如何向子组件传递数据,子组件如何将值回传给父组件,以及如何利用bus总线实现组件间通信。同时,提到了props类型的使用,以及在通信过程中避免直接修改父组件数据的注意事项。
摘要由CSDN通过智能技术生成

一. 父传子

父组件:
<Child :msg-data='msg' :str='str'></Child>  //自定义属性名不能有大写
子组件:
props:['numDate','str']

传递的引用数据类型,子组件可以改变父组件数据
传递是基本数据类型,子改,父不改
最好还是不要直接改传递的数据
如果子想改父,那就在子组件上把值赋给另一个子组件的值
用深拷贝,避免引用数据类型共用一个地址

二. 子传父

子组件先触发事件处理程序
在事件处理程序中通过自定义事件发送
通过父组件监听该事件,并触发对应的事件处理程序
在事件处理程序中获得改数据

子组件:
 this.$emit('send-data',this.msg) //不能有大写'sendData'
 this.$emit('send',this.num)
父组件:
<button-counter @send-data="getData"></button-counter>
 methods: {
   
     getData(data
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 中,组件间的传值可以通过 `props`、`$emit`、`$parent`、`$children`、`$attrs`、`$listeners` 等方式进行。 1. 父子组件之间的传值: 父组件可以通过 `props` 向子组件传递数据,子组件可以通过 `$emit` 触发事件向父组件传递数据。 例如,父组件向子组件传递一个名字: ```html <template> <div> <child-component :name="name" @change-name="changeName"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data () { return { name: 'Vue' } }, methods: { changeName (newName) { this.name = newName } } } </script> ``` 子组件接收父组件传递的数据,并通过 `$emit` 触发事件向父组件传递数据: ```html <template> <div> <p>父组件传递的名字:{{ name }}</p> <button @click="changeName">修改名字</button> </div> </template> <script> export default { props: { name: String }, methods: { changeName () { this.$emit('change-name', 'Vue.js') } } } </script> ``` 2. 子父组件之间的传值: 子组件可以通过 `$parent` 访问父组件的数据和方法,并通过 `$emit` 触发事件向父组件传递数据。 例如,子组件向父组件传递一个消息: ```html <template> <div> <button @click="sendMessage">发送消息</button> </div> </template> <script> export default { methods: { sendMessage () { this.$parent.showMessage('Hello, Vue.js') } } } </script> ``` 父组件接收子组件传递的数据,并展示消息: ```html <template> <div> <p>{{ message }}</p> <child-component></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data () { return { message: '' } }, methods: { showMessage (message) { this.message = message } } } </script> ``` 3. 非父子组件之间的传值: 非父子组件之间的传值可以通过一个空的 Vue 实例作为中央事件总线(Event Bus)来实现。 首先,创建一个空的 Vue 实例: ```javascript // EventBus.js import Vue from 'vue' export default new Vue() ``` 然后,在需要传递数据的组件中,通过 `import` 引入 EventBus,并使用 `$emit` 触发事件: ```html <template> <div> <button @click="sendMessage">发送消息</button> </div> </template> <script> import EventBus from './EventBus' export default { methods: { sendMessage () { EventBus.$emit('message', 'Hello, Vue.js') } } } </script> ``` 最后,在接收数据的组件中,也通过 `import` 引入 EventBus,并使用 `$on` 监听事件: ```html <template> <div> <p>{{ message }}</p> </div> </template> <script> import EventBus from './EventBus' export default { data () { return { message: '' } }, created () { EventBus.$on('message', (message) => { this.message = message }) } } </script> ``` 这样,就可以实现非父子组件之间的传值了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值