Вы должны использовать свойство watch
, чтобы иметь старое и новое значение, и добавить логический элемент в свой объект данных следующим образом:
data(){
return{
isModelOne:false,
modelOne:'',
}
}
свойство наблюдения:
watch:{
modelOne(newval,oldval){
oldval==''?this.isModelOne=true:this.isModelOne=false;
}
}
template:
<input v-if="isModelOne" v-model="modelOne">
<input v-else v-model="modelTwo">
Другим подходом, который может быть полезен, является использование модификатора .lazy
, который обновит связанный элемент после размывания ввода:
// ignore the following two lines, they just disable warnings in "Run code snippet"
Vue.config.devtools = false;
Vue.config.productionTip = false;
new Vue({
el: '#app',
data() {
return {
modelOne: '',
modelTwo: 'model two'
}
}
});
.two{
border-radius:20px;
border:2px solid #ff55aa!important;
}
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app" class="container">
<input v-if= "modelOne == ''" v-model.lazy="modelOne" class="form-control"/>
<input v-else v-model="modelTwo" class="form-control two" />
<input value="three" class="form-control"/>
</div>