Vue помещает объект в массив и делает его неизменяемым
Я довольно новичок в Vue / Javascript, так что это, вероятно, супер простой ответ. У меня есть компонент, который открывает модал, где вы можете выбрать продукт для добавления в заказ. Проблема в том, что я, когда я изменяю цену, то снова открываю модал, что все цены сбрасываются.
Как можно pickProduct
функцию pickProduct, чтобы изменения сохранялись при повторном открытии модала?
new Vue({
el: '#app',
data: () => ({
orderForm: {
lines: []
},
defaultLine: {
product: null,
price: ''
}
}),
methods: {
pickProduct(product) {
const emptyLine = Object.assign({}, this.defaultLine)
const newProduct = Object.assign({}, product)
Object.assign(emptyLine, newProduct)
newProduct.product = newProduct.id
// this.orderForm.lines.push(newProduct)
this.orderForm.lines = [...this.orderForm.lines, newProduct]
}
}
})
У вопроса есть решение - Посмотреть?

Вы можете сохранить данные в хранилище, используя VueX для управления состоянием модала. Когда модал открыт, он получает доступ к этой переменной состояния приложения и обновляет ее по мере необходимости.
Источник

Источник

Я не уверен, что это именно то, что вы ищете, но вы можете сделать объект неизменяемым с помощью .метод freeze()
Источник

@EmīlsGulbis это только предположение? К сожалению результат тот же самый
Источник

Просто предложение для более чистого кода, так как @EvanBechtol даст вам уже лучший совет для этой ситуации
Источник
Ответы - Vue помещает объект в массив и делает его неизменяемым / Vue push object into array and make immutable
Является ответом!

28.01.2020 07:17:38
Вы используете:value
в вводе цены, который на самом деле не изменяет значение для объекта, который вы редактируете. Так что это не имеет ничего общего с неизменностью. На самом деле привязка стоимости объекта, использовать v-model
вместо значения.
Так что измените это:
<input type="text" :value="item.price" />
к
<input type="text" :value="item.price" />
Помочь в развитии проекта: