@choupa
Архитектор (обычный, который строит)

Как вызывать пересчёт вычисляемого (computed) свойства, если оно зависит от изменения элемента массива?

Есть вычисляемое свойство-массив arrA.

data: {
  arrB: []
},
computed: {
   arrA: function () {
      return this.arrB;
   }
}

Долгими экспериментами обнаружил, что если я изменяю в массиве arrB только какой-то один или несколько элементов, то arrA() после этого не вызывается:
func1: function( i )  {
   this.arrB[ i ] = 'значение'   //  Если оперировать на уровне элементов, то arrA() не будет вызвана
}


А если с массивом arrB оперировать не на уровне его отдельных элементов, а изменить его весь "как целый"(т.е. изменить указатель на массив) , то arrA после этого вызывается:
func2: function()  {
   this.arrB = [ 'значение', 'ещё значение', 'и ещё' ];   //  Если изменить ссылку на массив, то arrA() будет вызвана
}


Поэтому пока я поставил такой костыль, и это работает:
func3: function( i )  {
  var tempArr = clone( this.arrB );       //  Клонирование массива
  tempArr[ i ] = 'значение';
  this.arrB = tempArr;
}


Но согласитесь, это же отстой. Можно ли как-то инициировать вызов arrA при изменении не всего массива arrB, а только его одного элемента? Это же типовая задача, мне кажется. Должно же быть нормальное решение.
  • Вопрос задан
  • 613 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Читаем документацию внимательнее.

Соответственно, правильно будет так:

this.$set(this.arrB, i, 'значение')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы