在component1.vue上我有
export default {
data () {
return {
editItemNumber: null,
editBreakdownNumber: null
}
}
在component2.vue上我有一个由数组填充的表
在该表上是一个编辑按钮。该表中的项目是itemNumber值。我需要从该特定行分配到component1.vue上的editItemNumber
<b-table show-empty bordered striped hover :items="itemTableList" :fields="fields">
<template slot="actions" scope="row">
<b-btn variant='success' size="sm" @click.stop="edit(row.item,row.index,$event.target)">Edit</b-btn>
</template>
</b-table>
如上所述,最初所有这一切都在一个组件上,我只是调用一个编辑函数,该函数重新填充了具有该行内容的v模型。但现在,各个组件之间存在分歧,我不知道如何编辑它来完成我所负责的任务。
我从未使用JavaScript,vue或基本HTML以外的任何内容。我是一名.NET开发人员,他的任务是帮助完成一些基于网络的工作,而且我正在挣扎。所以任何帮助都表示赞赏。
答案 0 :(得分:1)
在组件之间移动数据的首选方法是使用事件。
通常使用props
将数据从父组件传递给子组件,将事件从子组件传递给父组件。
因此edit
的{{1}}方法可能类似于
C2
然后你只需要在edit(item, index, target) {
const payload = {
item,
index,
target
};
this.$emit('edit', payload);
}
听取那个事件。请注意C1
属性:这意味着从@edit
触发edit
事件时,请运行我的“编辑”方法。
component-one
如果<template>
<div>
<p>{{ editItemNumber }}</p>
<component-two @edit="edit" />
</div>
<script>
export default {
data () {
return {
editItemNumber: null,
editBreakdownNumber: null
};
},
methods: {
edit(eventPayload) {
this.editItemNumber = eventPayload.item.editItemNumber
}
}
</script>
和C1
都是同一个父C2
的孩子,那么这个想法是相同的,除了P
无法直接收听C1
}。相反,C2
会听取编辑事件,并通过其P
将所需的更改传递到C1
。
关于组件的文档非常好,请特别注意有关道具和自定义事件的部分。 https://vuejs.org/v2/guide/components.html