@verycooldev

Как отслеживать любые изменения в объекте data?

Ломаю голову над проблемой. Есть компонент Article.vue в краде. Один и тот же компонент я хочу использовать как для создания так и для обновления. И во втором случае мне надо отслеживать ЛЮБЫЕ изменения существующих данных (которые прилетают от бэка). Пытаюсь сделать с watch, но ничего не получается.

props: ['articleProp'],
    data() {
        return {
            article: {
                title: null,
                description: null
            }
        }
    },
    watch: {
        article: {
            deep: true,
            handler(newValue, oldValue) {
                console.log('triggered')
            }
        }
    },
    mounted() {
        if (this.articleProp) {
            Object.keys(this.articleProp).filter(key => key in this.article).forEach(key => {
                this.article[key] = this.articleProp[key]
            })
        }
    }


Проблема в том, что я назначаю this.article в mounted и watch срабатывает тогда когда мне не надо. Кроме того, вотчер возвращает оба одинаковых значения и невозможно ничего отследить!!! Я нифига не пойму вообще что делать?

Как сделать назначение существующих данных и ПОТОМ отслеживать изменения в вотчере?
  • Вопрос задан
  • 2849 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
watch срабатывает тогда когда мне не надо

Ну так и включайте наблюдение только тогда, когда вам это нужно. Как это сделать, можете прочесть в документации.

вотчер возвращает оба одинаковых значения

Что естественно - от того, что вы изменили какое-то из свойств объекта, объект не заменит себя своей копией. Хотите, чтобы старое и новое значение были разными - заменяйте объект целиком.
Ответ написан
yarkov
@yarkov Куратор тега Vue.js
Помог ответ? Отметь решением.
handler(newValue, oldValue) {
  if (oldValue.title === null && description.title === null) {
    console.log('init')
  } else {
    console.log('change')
  }
}

Так попробуйте. Но вообще пересмотрите логику, что-то явно не так пошло.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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