【发布时间】: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 已经够糟糕了,应该使用
somethingvuex 存储并观察模型上的变化,当你提交时它会发生变化
标签: javascript vue.js vuejs2 event-bus