2025.2.13
问题: unapp 使用uview组件库的u-textarea组件设置最大值maxlength,移动端复制时容易出现超出最大字数的现象(pc端调试不会出现)

解决:该组件初始化时传入格式方法限制最大字数
<u-textarea v-model="form.content" maxlength="140" count placeholder="请输入店铺简介" ref="textarea"></u-textarea>
onReady() {
this.$refs.textarea.setFormatter((value) => {
if (value.length >= 140) {
return value.substr(0, 140)
} else {
return value
}
})
},

原因:u-textarea组件设置的最大字数是限制用户输入的字数,剪切板的复制不会触发输入的监听方法
源码:
<text
class="u-textarea__count"
:style="{
'background-color': disabled ? 'transparent' : '#fff',
}"
v-if="count"
>
{{ innerValue.length }}/{{ maxlength }}
</text>
onInput(e) {
let { value = "" } = e.detail || {};
const formatter = this.formatter || this.innerFormatter
const formatValue = formatter(value)
this.innerValue = value
this.$nextTick(() => {
this.innerValue = formatValue;
this.valueChange();
})
},