gpt4 book ai didi

javascript - 如何在组件链上传播 Vue.js 事件?

转载 作者:可可西里 更新时间:2023-11-01 02:57:49 24 4
gpt4 key购买 nike

我确实有三个组成部分。

Vue.js dev view

我对 Datatable 组件的作用没有任何影响,因为我从 npm 获得了它。

现在我想从 EditButton 发送一个事件到我的 Zonelist

Zonelist 组件:

<template>
<datatable :columns="table_columns" :data="table_rows" filterable paginate v-on:remove="removeItem"></datatable>
</template>
<script>
import datatable from 'vuejs-datatable';
import moment from 'moment';
export default {
data() {
return {
table_columns: [
{label: "Zone", component: 'ZoneLink'},
{label: "Last updated", callback (row) {
let locale = $('html').closest('[lang]').attr('lang') || 'en';
moment.locale(locale);
return moment(row.last_updated).format('D. MMM YYYY');
}},
{label: '', component: 'EditButton'}
],
table_rows: [
{
"name": "xyz.de",
"last_updated": "2017-10-21 17:29:50"
}
],
form: {
name: '',
errors: []
}
};
},
components: {
datatable
},
methods: {
removeItem (item) {
this.table_rows.forEach((value, index, array) => {
if (value.name === item) {
Vue.delete(array, index);
}
});
}
}
}
</script>

现在我的 EditButton 组件 $emit() 是带有参数的 remove 事件。

但是没有任何反应。所以我认为 vue 无法定位监听器。

(我在这里使用 ES6 的方法简写)

如果不通过 EditButton 中的 this.$parent.$parent 改变 Zonelist 的状态,我如何才能正确地做到这一点?

最佳答案

Non parent-child communication在 Vue 中,通常通过事件总线或状态管理系统进行处理。

在这种情况下,除非您的应用程序更复杂,否则事件总线可能就是您所需要的。由于您使用的是单文件组件,您可能需要在窗口上声明总线,可能在您的主脚本中。

window.bus = new Vue()

然后在您的 EditButton 中,您可以发出事件

bus.$emit('some-event', someData)

在您的 ZoneList 中,您可以收听它。

bus.$on('some-event', someData => this.doSomething(someData))

关于javascript - 如何在组件链上传播 Vue.js 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com