Vue中非父子组件通过事件总线改变数据但data中数据不变的问题

在Vue中,通过事件总线实现非父子组件间通信时遇到数据不更新的问题。尽管事件成功接收并打印,但组件的data并未改变。原因在于缺少上下文绑定。解决方案是在调用函数时使用.bind(this),确保函数内部能正确引用组件的data,从而实现数据的正确修改和渲染。
摘要由CSDN通过智能技术生成

Vue中创建事件总线之后,非父子组件1向非父子组件2发送事件之后,非父子组件2成功接收到事件,并对组件2中的参数进行修改

  1. 先在main.js中创建Vue对象并赋给$EventBus实例,代码如下
Vue.prototype.$EventBus=new Vue()
  1. 父子组件1(事件发出端)–使用$emit发出事件
<template>
<div  @click="setprclick()">设置</div>
</template>
<script>
export default {
    name:"Profile",
    methods:{
        setprclick(){
        this.$EventBus.$emit('setprclick')       
        }
    }
}
</script>
  1. 非父子组件2(事件接受端)----使用$on接收事件
<template>
  <div id="app" class="wrapper">
    <main-tab-bar v-show="set" />
  </div>
</template>

<script>
import MainTabBar from "components/content/mainTabbar/MainTabBar";
export defaul
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue父子组件之间可以通过props和$emit来实现数据的共享。 1. 使用props传递数据: 父组件可以通过props属性将数据传递给子组件。在子组件,可以通过props选项接收父组件传递的数据,并在子组件使用。 ```vue // 父组件 <template> <div> <child-component :message="message"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { message: 'Hello from parent component' }; } }; </script> // 子组件 <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] }; </script> ``` 2. 使用$emit触发事件: 子组件可以通过$emit方法触发一个自定义事件,并将数据作为参数传递给父组件。在父组件,可以通过监听子组件触发的事件来获取子组件传递的数据。 ```vue // 父组件 <template> <div> <child-component @message-updated="updateMessage"></child-component> <p>{{ message }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { message: '' }; }, methods: { updateMessage(newMessage) { this.message = newMessage; } } }; </script> // 子组件 <template> <div> <button @click="sendMessage">Send Message</button> </div> </template> <script> export default { methods: { sendMessage() { this.$emit('message-updated', 'Hello from child component'); } } }; </script> ``` 这样,父组件就可以通过props接收子组件传递的数据,子组件也可以通过$emit触发事件数据传递给父组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值