• Vue Directive, v-model и input value, передать разные значения?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Устанавливаете неотформатированное значение; передаёте событие input - чтобы обработчик, установленный директивой v-model, обновил данные в компоненте; устанавливаете отформатированное значение. Для предотвращения рекурсивной обработки событий input проверяете isTrusted:

    function updateValue(el) {
      el.value = el.value, из которого удалено всё, кроме цифр;
      el.dispatchEvent(new Event('input'));
      el.value = форматированное значение el.value;
    }
    
    function onInput(e) {
      if (e.isTrusted) {
        updateValue(e.target);
      }
    }
    
    Vue.directive('number', {
      bind(el) {
        el.addEventListener('input', onInput);
        updateValue(el);
      },
      update(el) {
        updateValue(el);
      },
      unbind(el) {
        el.removeEventListener('input', onInput);
      },
    });

    https://jsfiddle.net/Lsg6ct57/2/
    Ответ написан
    1 комментарий