groog
@groog
Я только учусь

Как правильно добавлять и удалять обработчики событий в директиве (Vue)?

Разбираюсь в директивах и одновременно пытаюсь создать свою. Но столкнулся с проблемой: если использовать внешнюю функцию, то при привязке(bind) возможно добавить обработчик событий к элементу, а при отвязке(unbind), соответственно, удалить, но как при этом сохранить доступ к el и binding?

Пример:
function getKey(e) {
  console.log("key", e.key);
  console.log("binding.value", binding.value); // недоступно через замыкания
}

Vue.directive("input-test", {
  bind: function(el, binding) {
    el.addEventListener("keydown", getKey); 
  },
  unbind: function(el) {
    el.removeEventListener("keydown", getKey);
  }
});


Как решить данную проблему и есть-ли хорошие практики для подобных ситуаций? Возможно-ли создавать внутренние функции для директивы, которые будут доступны во всех хуках?
  • Вопрос задан
  • 716 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
сохранить доступ к el и binding

Элемент будет доступен как this.

Что до binding - можно использовать dataset для передачи значения. Например.

UPD. Вынесено из комментариев:

датасет дает нам возможность сохранять только примитивы

Можно прицепить интересующий вас объект к элементу в качестве его свойства, типа так. Или использовать Map/WeakMap, где ключом будет элемент, например.

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

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

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