【发布时间】:2018-05-12 19:08:43
【问题描述】:
所以我正在学习 Vue.js,经过一番努力,我(不知何故)得到了以下代码工作。我知道如果它有效,它并不愚蠢,但是我想帮助我改进我的代码,因为我怀疑我是否采取了正确的方法。
以下代码允许用户通过单击按钮来添加 Item 组件的多个实例。 Item 中的 name 字段的输入被传递给一个对象,该对象被插入一个数组中,该数组被发送回父组件。
我对这种方法的主要问题是 items 数组作为道具在 Item 的所有实例之间共享,这是不必要的。但是,我无法提出另一个解决方案,因为我只知道如何通过将数据作为道具传递并更新来在组件之间共享数据。我还读到道具只能由父母更新,所以我猜我也违反了该规则。
有人可以教我一个更好的方法吗?
父代码
<template>
<div class="items">
<div v-for="n in itemCount">
<Item :count="n" :items="items" />
</div>
</div>
<button @click="addItem">Add item</button>
</template>
<script>
import Item from './../components/Item'; //the child
export default {
components: {
Item
},
data() {
return {
itemCount: 1,
items: [],
}
},
methods: {
addItem() {
this.itemCount ++;
}
}
}
</script>
儿童
<template>
<div class="item">
<label>Item name</label>
<input type="text" v-model="name" @input="update(count)" />
</div>
</template>
<script>
export default {
props: ['items','count'],
data() {
return {
name: '',
}
},
methods: {
createItem(index) {
return {
index: index-1,
name: this.name,
}
},
update(index) {
const item = this.createItem(index);
this.$set(this.items, index-1, item);
},
}
}
</script>
【问题讨论】:
标签: javascript vue.js vue-component