首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VueJS 2不能在挂载()中发出事件,创建()钩子

VueJS 2不能在挂载()中发出事件,创建()钩子
EN

Stack Overflow用户
提问于 2020-10-30 11:37:20
回答 3查看 935关注 0票数 1

突然,发射器停止工作:

event-bus.js

代码语言:javascript
复制
import Vue from 'vue';
export const EventBus = new Vue();
代码语言:javascript
复制
import { EventBus } from '../event-bus';

...

mounted() {
  this.getCart();
}

...

methods: {
      getCart() {
        axios.get(`${app.api_erp_url}/cart/${this.cartId}`).then((response) => {
          this.cart = response.data;
          EventBus.$emit('cartLoaded', this.cart); // this not working
        });
      }
},

another-component.vue

代码语言:javascript
复制
mounted() {
      // MiniCart.vue
      EventBus.$on('cartLoaded', (payload) => {
        ...
      });
    },

无论我如何尝试在mounted/created中发出事件,它都不会工作。没有问题,当触发事件的点击或其他。

创建沙箱:https://codesandbox.io/s/gracious-kilby-m43ih?fontsize=14&hidenavigation=1&theme=dark

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-30 21:31:39

子组件挂载在此之前它们的父组件。

这是在您的示例中出现的顺序:

  1. 创建了HelloWorld (父)
  2. 创建Test (子)
  3. Test (子)被挂载,它发出一个事件
  4. HelloWorld (父)被挂载,它订阅已经发出的事件。

如果希望HelloWorld从其子节点捕获事件,请在created挂钩中订阅该事件。

演示

票数 3
EN

Stack Overflow用户

发布于 2020-10-30 11:50:04

根据,您应该使用kebab-case格式来命名自定义事件:

代码语言:javascript
复制
EventBus.$emit('cartLoaded', this.cart);//not correct

EventBus.$emit('cart-loaded', this.cart); //correct
票数 1
EN

Stack Overflow用户

发布于 2020-10-30 20:49:47

可能是在MiniCart.vue组件注册事件之前发出的事件。

在代码中的意思。

代码语言:javascript
复制
  EventBus.$emit('cartLoaded', this.cart);

此运行在事件注册之前第一次运行。

代码语言:javascript
复制
EventBus.$on('cartLoaded', (payload) => {
        ...
      });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64607638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档