Большинство встроенных в JavaScript функций массива изменяет массив, а не создает новый массив. Vue обнаружит изменения, но основное поведение останется прежним, массив будет изменен.
Например, array.push(17)
добавляет новое значение в конец того же массива, но не создает новый массив.
Если вы измените массив, он уведомит функцию watch
, но «новый» массив - это тот же объект, что и исходный массив. Итак, Vue передает вам старый массив, вы только что изменили этот массив. Vue не хранит копию исходного состояния этого массива.
С Документы :
Примечание: при замене (а не замене) объекта или массива старое значение будет совпадать с новым значением, поскольку они ссылаются на один и тот же объект / массив. Vue не сохраняет копию значения перед изменением.
Если вы просто заботитесь о длине, вы можете сделать что-то вроде этого:
computed: {
arrayLength () {
return this.array.length
}
},
watch: {
arrayLength (newLength, oldLength) {
// ...
}
}
или более непосредственно:
watch: {
'array.length' (newLength, oldLength) {
// ...
}
}
Если вам действительно нужен старый массив, то вам придется либо передать копию в качестве значения реквизита, либо взять копию в своем компоненте.