Задать вопрос

Как создать один watcher для отслеживания нескольких данных?

Есть такой код:

watch: {
    processes: {
      handler() {
        this.init();
        this.$refs.editor.reInit();
      },
      deep: true,
    },
    conditionsIds: {
      handler() {
        this.init();
        this.$refs.editor.reInit();
      },
      deep: true,
    },
    activeDialog: {
      handler() {
        this.init();
        this.$refs.editor.reInit();
      },
      deep: true,
    },
    variables: {
      handler() {
        this.init();
        this.$refs.editor.reInit();
      },
      deep: true,
    },
  },

Мне не нравиться такой дублирующийся код.
Как можно это упростить, создать один watcher для всех этих данных?
  • Вопрос задан
  • 190 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
Сделать вычисляемое свойство - объект, который будет содержать всё, что требуется отслеживать. Установить наблюдение за этим свойством.
Ответ написан
bootd
@bootd
Гугли и ты откроешь врата знаний!
Объедените данные в 1 объект, и сможете следить за 1м объектом.
Указать вотчеру множество свойств для отслеживания нельзя.

Но можно воспользоваться таким трюком:

mounted() {
    this.$watch(vm => [vm.processes, vm.conditionsIds, vm.activeDialog, vm.variables], value => {
      this.init();
      this.$refs.editor.reInit();
    }, {
      immediate: true, 
      deep: true
    }) 
  }


На мой взгляд, этот код ещё хуже, т.к. не явно определяет вотчеры при просмотре компонента.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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