Как создать один 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 для всех этих данных?
  • Вопрос задан
  • 165 просмотров
Решения вопроса 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
    }) 
  }


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

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

Войти через центр авторизации
Похожие вопросы