Vue v-model with watch
by Zaiste
HTML
<div id="app">
<!-- using v-model... -->
<my-input v-model="foo"></my-input>
<!-- is the same as this... -->
<my-input :value="bar" @input="bar = $event"></my-input>
{{ foo }}<br>
{{ bar }}
</div>
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
Vue.component('my-input', {
template: `
<div>
My Input:
<input v-model="inputVal">
</div>
`,
props: ['value'],
data() {
return { inputVal: this.value }
},
watch: {
inputVal(val) {
this.$emit('input', val);
}
}
})
new Vue({
el: '#app',
data() {
return { foo: 'a', bar: 'b' }
}
})