Лучше всего структурировать вашу модель данных так, чтобы она отражала представление. Если вы храните типы продуктов и количества отдельно, то вам будет трудно попытаться соединить их вместе в представлении, потому что данные будут повсеместно.
Вы хотите иметь список входных данных для каждого типа, поэтому ваша модель данных может быть массивом объектов, каждый из которых имеет свойство productType
и свойство quantity
. Первоначально каждое количество будет равно 0.
data() {
return {
orderDetails: [
{ productType: 'A', quantity: 0 },
{ productType: 'B', quantity: 0 },
{ productType: 'C', quantity: 0 },
{ productType: 'D', quantity: 0 },
]
}
}
Но, допустим, вы не знаете, какие типы будут опережать время (возможно, вы выбираете типы из какого-то API), поэтому вы не можете структурировать такие данные прямо в коде, как я показал. Итак, все, что вам нужно сделать, это динамически создать массив orderDetails
, если у вас есть массив типов:
data() {
return {
orderDetails: []
}
},
async created() {
// Fetch the types from some hypothetical API
const types = await fetchTypes()
// Populate the orderDetails array from the types
this.orderDetails = types.map(type => ({
productType: type,
quantity: 0,
}))
}
Теперь это всего лишь отображение 1-к-1 между данными и представлением!
<ul>
<li v-for="(item, index) in orderDetails" :key="index">
<input type="number" v-model="item.quantity">
{{ item.productType }}
</li>
</ul>
Ваше представление (шаблон) должно быть очень простым без сложной обработки данных; это должна быть простая функция данных.