У меня есть ввод, где пользователь может вводить дату, и при наборе я бы хотел отформатировать ее значение до DD/MM/YYYY
. Поэтому, когда входное значение соответствует требуемому формату, я бы хотел запретить пользователю печатать.
<template>
<input v-model="dob" @input="handleInput">
</template>
<script>
export default {
data() {
return {
dob: ""
};
},
methods: {
handleInput(e) {
let value = e.target.value;
this.dob = this.$options.filters.formatTo(value, "date");
}
}
};
</script>
это фильтр, который я пробовал,
Vue.filter('formatTo', function(value, format) {
const formats = {
date: {
blocks: [2, 2, 4],
delimeter: '/'
}
};
if (!value || !(format in formats)) return;
const { blocks, delimeter } = formats[format];
const numberOfBlocks = blocks.length - 1;
const maxLength = numberOfBlocks + blocks.reduce((a, b) => a + b, 0);
let index = -1;
value = value.toString().split('');
blocks.map(block => {
index += block + 1; // here +1 is for delimeter
value.splice(index, 0, delimeter);
});
// remove excess values
value.length = value.length > maxLength ? maxLength : value.length;
return value.join('').trim();
});