Vue помещает объект в массив и делает его неизменяемым


Vue помещает объект в массив и делает его неизменяемым

28.01.2020 05:51:44 Просмотров 59 Источник

Я довольно новичок в Vue / Javascript, так что это, вероятно, супер простой ответ. У меня есть компонент, который открывает модал, где вы можете выбрать продукт для добавления в заказ. Проблема в том, что я, когда я изменяю цену, то снова открываю модал, что все цены сбрасываются.

Как можно pickProductфункцию pickProduct, чтобы изменения сохранялись при повторном открытии модала?

Сайт CodePen

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]
    }
  }
})
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59951373/vue-push-object-into-array-and-make-immutable#comment106022415_59951373
Вы можете сохранить данные в хранилище, используя VueX для управления состоянием модала. Когда модал открыт, он получает доступ к этой переменной состояния приложения и обновляет ее по мере необходимости.
https://stackoverflow.com/questions/59951373/vue-push-object-into-array-and-make-immutable#comment106022478_59951373
Я не уверен, что это именно то, что вы ищете, но вы можете сделать объект неизменяемым с помощью .метод freeze()
https://stackoverflow.com/questions/59951373/vue-push-object-into-array-and-make-immutable#comment106022912_59951373
@EmīlsGulbis это только предположение? К сожалению результат тот же самый
https://stackoverflow.com/questions/59951373/vue-push-object-into-array-and-make-immutable#comment106022940_59951373
Просто предложение для более чистого кода, так как @EvanBechtol даст вам уже лучший совет для этой ситуации

Ответы - Vue помещает объект в массив и делает его неизменяемым / Vue push object into array and make immutable

Является ответом!
AJT82

28.01.2020 07:17:38

Вы используете:valueв вводе цены, который на самом деле не изменяет значение для объекта, который вы редактируете. Так что это не имеет ничего общего с неизменностью. На самом деле привязка стоимости объекта, использовать v-model вместо значения.

Так что измените это:

<input type="text" :value="item.price" />

к

<input type="text" :value="item.price" />

Сайт CodePen

Помочь в развитии проекта:
Закрыть X