Я полагаю, что это стандартное предостережение относительно обновления массивов с помощью индексов:
https://vuejs.org/v2/guide/list.html#Caveats
Vue не может обнаружить изменения, внесенные в массив, путем непосредственного присвоения значения индексу.
Итак, вместо этого:
this.out.arr[0] = {a:2}
... вам нужно использовать это:
this.$set(this.out.arr, 0, {a: 2})
Обновление:
Чтобы понять разницу между двумя случаями, упомянутыми в вопросе, это может помочь полностью выписать их.
this.out.arr[0] = {a:2}
// ... is equivalent to ...
const arr = this.out.arr // read
arr[0] = {a: 2} // write
Принимая во внимание:
this.out.arr[0].a = 2
// ... is equivalent to ...
const obj = this.out.arr[0] // read
obj.a = 2 // write
В двух приведенных выше примерах я разделил части выражений для чтения и записи. Чтение значений с использованием индекса массива не проблема, просто запись. Первый пример пытается записать свойство 0
arr
, которое нарушает предостережение индексов Vue. Второй пример пытается записать в свойство a
obj
, которое не имеет индекса массива, поэтому не имеет такой проблемы.