Watcher не ловит изменения значений массива

1

У меня есть простой массив, структурированный следующим образом:

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
    }
},

Единственными изменениями времени являются "наблюдаемые", когда элемент массива добавляется или удаляется, но не тогда, когда изменяется значение (время).

Как я могу выполнить это поведение?

Теги:
vue.js

1 ответ

0
Лучший ответ

Из-за ограничений в 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)

Источник: https://vuejs.org/v2/guide/list.html#Caveats

Ещё вопросы

Сообщество Overcoder
Наверх
Меню