To make good looking Vue apps, we need to style our components.
To make our lives easier, we can use components with styles built-in.
In this article, we’ll look at how to add a text area.
Text Area
We can add a text area to a form to let us add multiline text inputs.
It can support auto height sizing, minimum and maximum number of rows, and displaying validation states.
To add one, we use the b-form-textarea
component.
For instance, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" rows="3" max-rows="6"></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
We added the b-form-textarea
input box.
v-model
binds text
to the inputted value.
placeholder
has the placeholder.
rows
is set to 3, but we can enter up to 6 rows of text with the max-rows
.
The entered value is displayed.
Sizing
We can change the size of the input.
To change the size, we can use the size
prop.
For example, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" size="sm"></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
to shrink the text area.
The possible values are 'sm'
or 'lg'
. 'sm'
is for small. 'lg'
is for large.
Displayed Rows
We can change the rows with the rows
prop.
For example, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" rows="8"></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
then we have 8 rows in our text area.
Disable Resize
The no-resize
prop disables the resizing of the text area.
For instance, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" rows="3" no-resize></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
The no-resize
prop disables the resize handle.
Auto Height
By default, the b-form-textarea
will adjust its height to fit the content.
We can use the no-auto-shrink
prop to disable shrinking if the inputted rows are reduced.
sticky
will make it never shrink.
For instance, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" rows="3" max-rows="8" no-auto-shrink></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
Validation States
We can set the state
prop to display the validation state of the input.
For instance, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" :state="text.length >= 5"></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
We have the state
prop that checks if text
‘s length
is bigger than or equal to 5 for it to be considered valid.
The box is displayed in red if it’s invalid.
Otherwise, it’s displayed in green.
Text Formatter
We can format the inputted text the way we want.
To do that, we can set the formatter
prop.
For instance, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" :formatter="formatter"></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
},
methods: {
formatter(value) {
return value.toUpperCase();
}
}
};
</script>
We have the formatter
method to return the text turned upper case.
Make the Text Area Display as Plain Text
The plaintext
prop makes the text area display as plain text.
For example, we can write:
<template>
<div id="app">
<b-form-textarea v-model="text" placeholder="Enter text" plaintext></b-form-textarea>
<p>{{text}}</p>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
text: ""
};
}
};
</script>
Now we don’t have the border displayed.
Make it Read Only
The readonly
prop makes it read-only.
Conclusion
We can use the b-form-textarea
to add a text area to our app.
It can be customized in various, like changing the size or display it as plain text.