【问题标题】:When calling the EventBusses in vueJS, one of them is not working at all在 vueJS 中调用 EventBusses 时,其中一个根本不起作用
【发布时间】:2024-01-22 16:31:01
【问题描述】:

所以我在创建时运行的代码中添加了第二条总线,但无论我以何种顺序调用总线,第二条总线 (eventBus2) 都不会被调用,然后不返回任何数据。通过打印一些控制台日志,我感觉 eventBus2.$on 永远不会执行。是否有一些我不知道的 Vue 规则,有什么建议吗?

项目.vue

<template>
  <div>
    <table>
      <tr
        v-for="item in info"
        :key="item.id"
        @click="editThisItem(item.id)"
      >
        <td>{{ item.name}}</td>
        <td>{{ item.number}}</td>
        <td>{{ item.size}}</td>
      </tr>
    </table>
  </div>
</template>

<script>
import Something from "./Something.vue";
import axios from "axios";
import { eventBus } from "../main";
import { eventBus2 } from "../main";
export default {
  components: { Something },
  name: "Item",
  data() {
    return {
      selected_item_id: 0,
      info: null,
    };
  },
  methods: {
    editThisItem(bolt) {
      this.selected_item_id = bolt;
      eventBus2.$emit("itemWasSelected", this.selected_item_id);
      eventBus.$emit("newTabWasAdded", "edit-item");
    },
  },
  mounted() {
    axios
      .get("http://localhost:8080/items")
      .then((response) => (this.info = response.data._embedded.artikli));
  },
};
</script>

EditItem.vue

<script>
import Something from "./Something.vue";
import axios from "axios";
import { eventBus2 } from "../main";
export default {
  components: { Something},
  name: "Edit-item",
  data() {
    return {
      info: null,
      select_number: 0,
      select_name: "",
      selected_item_id: -1,
      priv_item: {
      id: 0,
      size: "big"
      },
    };
  },
  mounted() {
    if (this.selected_item_id != -1) {
      axios
        .get("http://localhost:8080/items/" + this.selected_item_id)
        .then((response) => (this.priv_item = response.data));
    }
  },
  created() {
    eventBus2.$on("itemWasSelected", (data) => {
      this.selected_item_id = data;
      console.log(" + " + data);
      //this  console log does not even print the "+", the data is empty
    });
    console.log(this.selected_item_id);
  },
};
</script>

main.js

export const eventBus = new Vue();
export const eventBus2 = new Vue();

【问题讨论】:

  • 你不需要多个全局事件总线 1 已经够糟糕了,应该使用 something vuex 存储并观察模型上的变化,当你提交时它会发生变化

标签: javascript vue.js vuejs2 event-bus


【解决方案1】:

你期待itemWasSelected 和发射WasSelected 他们应该是一样的。

PD:这可以在一行中完成。

import { eventBus } from "../main";
import { eventBus2 } from "../main";
import { eventBus, eventBus2 } from "../main";

【讨论】:

  • 抱歉,打错了,当我改正时,结果还是一样。
  • console.log(this.selected_item_id);登录同一个创建的方法打印值?
  • 我添加了该控制台日志以查看值是否更改但没有更改。
  • 好吧,如果它显示了它在发射之前加载的组件,所以我不知道那会是什么,出于好奇,你为什么需要 2 条总线?
  • 一个总线用于添加一些新功能,另一个总线用于在 2 个不同的子元素之间传递数据
最近更新 更多