У меня есть простой массив, структурированный следующим образом:
dates[2]
0:"2018-01-09T15:00:00.000Z"
1:"2018-01-10T14:00:00.000Z"
И мой наблюдатель настроен так:
data() {
return {
dates: [],
}
}
watch: {
// whenever dates changes, this function will run
dates: {
handler: function(before, after) {
console.log('dates is changed');
},
deep: true
}
},
Единственными изменениями времени являются "наблюдаемые", когда элемент массива добавляется или удаляется, но не тогда, когда изменяется значение (время).
Как я могу выполнить это поведение?
Из-за ограничений в JavaScript, Vue не может обнаружить следующие изменения в массиве:
Когда вы прямо устанавливаете элемент с индексом, например,
vm.items[indexOfItem] = newValue
Когда вы изменяете длину массива, например, vm.items.length = newLength
Чтобы преодолеть оговорку 1, обе следующие будут выполняться так же, как
vm.items[indexOfItem] = newValue
, но также будут запускать обновления состояния в системе реактивности:
// Vue.set
Vue.set(example1.items, indexOfItem, newValue)
// Array.prototype.splice
example1.items.splice(indexOfItem, 1, newValue)
Чтобы справиться с caveat 2, вы можете использовать splice:
example1.items.splice(newLength)