Vue
by WILLIAM CORREA
HTML
<div id="app">
<the-input v-model="value"></the-input>
<pre>{{ value }}</pre>
</div>
<template id="input" type="x/template">
<input type="text" :value="masked" @input="input">
</template>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
Vue
new Vue({
el: "#app",
components: {
TheInput: {
template: '#input',
props: ['value'],
data: () => ({ model: '' }),
computed: {
masked () {
return `masked: ${this.value}`
}
},
methods: {
input ($event) {
const unMasked = String($event.target.value).replace('masked: ', '')
this.$emit('input', unMasked)
}
}
}
},
data: {
value: ''
}
})