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

Всем доброго времени суток!

Есть директива, для работы с числами в INPUT, основная задача - это делить 1 000 000, ну и работа с дробями. Все чудесно работает, но есть одно но.

1000000 -> INT

"1 000 000" -> String

Как мне после изменения числа в INPUT отображать в INPUT непосредственно отформатированное число (с пробелами, запятыми и так далее ->>>> СЕЙЧАС ТАК И РАБОТАЕТ), но в модель (v-model) передать не отформатированное число, то есть убрать пробелы, и так далее.. Подскажите пожалуйста.

Конечно можно после каждой работы в самом компоненте парсить, убирать пробелы, и так далее, но данная директива будет использоваться достаточно много в проекте, поэтому, хотелось бы чтобы это работало в автоматическом режиме..
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
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/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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