Ant Design Vue Textarea “字数统计” - zptime/blog GitHub Wiki
推荐一个实用的“字数统计”功能:Ant Design Vue
默认的 Textarea 组件是没有字数统计功能的,但这个功能又是很常见的,所以就做了一个简单的二次封装。其实这个功能很简单,就是在右下角加上一个计数文本,用定位处理一下就行。
官网地址:https://antdv.com/components/input-cn/
基本使用如下所示:
<a-textarea v-model="desc" placeholder="请输入描述" :auto-size="false" />
$attrs
和v-model
实现原理可查看封装原理解析
<template>
<div class="textarea-wrapper">
// 文本框
<a-textarea
class="m-textarea"
v-bind="$attrs"
v-model="$attrs.value"
@change="onChange"
/>
// 字数统计
<span v-if="showWordLimit" class="m-count"
>{{ textLength }}/<template v-if="$attrs.maxLength"
>{{ $attrs.maxLength }}</template
></span
>
</div>
</template>
<script>
export default {
props: {
// 是否展示字数统计
showWordLimit: {
type: Boolean,
default: false,
},
},
// v-model处理
model: {
prop: "value",
event: "change",
},
computed: {
textLength() {
return (this.$attrs.value || "").length;
},
},
methods: {
onChange(e) {
// v-model 回调函数
this.$emit("change", e.target.value);
},
},
};
</script>
<style lang="scss" scoped>
.textarea-wrapper {
position: relative;
display: block;
.m-textarea {
padding: 8px 12px;
height: 100%;
}
.m-count {
color: #808080;
background: #fff;
position: absolute;
font-size: 12px;
bottom: 8px;
right: 12px;
}
}
</style>
使用也很简单,和正常的 textarea
一样就行。如果要开启字数统计,showWordLimit
和 maxLength
都要配置才行。
<m-textarea
v-model="desc"
:showWordLimit="true"
:maxLength="20"
:autoSize="false"
placeholder="请输入描述"
/>