In JavaScript, object can optional spread value like this:
const payload = {
name: "Joseph",
...(isMember && { credential: true })
};
In React, JSX can optional pass props like this:
<Child {...(editable && { editable: editableOpts })} />
Now in Vue, how do I achieve optional v-model?
I have a textarea like this
<template> <textarea v-model="textValue"> <!-- How can I optional bind v-model? --> </template>
How can I achieve optional bind v-model?
I want to do this because I want to show warning on that textarea when error occurs.
When error occurs, textarea shows the warning and clear the input (the v-model)
Advertisement
Answer
The correct way is to use the get and set properties of computed variable
<template>
<textarea v-model="compVal" />
</template>
<script>
export default {
data () {
return {
valueTrue: 'hello',
valueFalse: 'bye',
selected: false
}
},
computed: {
compVal: {
get () {
if (this.selected) {
return this.valueTrue
} else {
return this.valueFalse
}
},
set (val) {
if (this.selected) {
this.valueTrue = val
} else {
this.valueFalse = val
}
}
}
}
}
</script>