В массиве объектов, наблюдаемых с помощью Vue-watch, как получить индекс объекта, который был изменен? - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть массив объектов, например:

 myArray: [{
 name: "First",
 price: 10,
 rebate: 5,
 listPrice: 15,
 outcome: 0
 },{
 name: "Second",
 price: 11,
 rebate: 5,
 listPrice: 16,
 outcome: 0
}

Я хочу пересчитать значение outcome всякий раз, когда изменяется любое из других значений в этом же объекте.

У меня уже есть такая установка, но она ищет изменения в любом объекте, а затем пересчитывает весь массив.Мне удалось настроить это с помощью комбинации функций computed и watch.Однако они следят за изменениями во всем массиве, а затем пересчитывают значение результата для всех объектов в массиве.

Как я могу отслеживать изменения и затем пересчитывать только измененный объект ?

Ниже приведены мои текущие функции для пересчета всего массива (просмотра другого свойства), но то, что я ищу, может быть совершенно другим.

вычислено:

myArrayWasChanged() {
return [this.myArray.reduce((a, {vendors}) => a + vendors, 0), this.myArray.filter(item => item.discounted == false).length] 

часы:

myArrayWasChanged: {
handler: function (val, oldVal) {
this.recalculateIsVendor();

1 Ответ

0 голосов
/ 26 ноября 2018

Учитывая, что outcome полностью зависит от других свойств, он на самом деле не является частью состояния компонента.Таким образом, в data компонента можно сохранить массив без outcome, а затем вычислить новую версию массива с результатом в качестве вычисляемого свойства.

data: function () {
  return {
    myArrayWithoutOutcome: [
    {
      name: "First",
      price: 10,
      rebate: 5,
      listPrice: 15
    },
    {
      name: "Second",
      price: 11,
      rebate: 5,
      listPrice: 16
    }]
  }
},
computed: {
  myArrayWithOutcome: function () {
    return this.myArrayWithoutOutcome.map(x => {
      return {...x, outcome: this.calculateOutcome(x)}
    })
  }
},
methods: {
  calculateOutcome(item) {
    // Logic to calculate outcome from item goes here
    return 0
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...