代码节选如下:
// 富文本组件
<template>
<div ref="editorRef"></div>
</template>
<script lang="ts" setup>
import E from 'wangeditor'
const props = withDefaults(
defineProps<{
modelValue: string
action?: string // 上传图片基础地址
path: string // 上传图片业务地址
height: number
disabled: boolean // 是否禁用
maxLength: number // 最大输入长度
maxstrLength: number //最大字符长度
}>(),
{
modelValue: '',
action: ‘’,
path: '/',
height: 500, // 设置编辑区域高度
disabled: false, // 默认启用
maxLength: 25000,
maxstrLength: 200000,
}
)
const emit = defineEmits(['update:modelValue', 'update:isActive', 'update:overLen'])
let editor: E | null
onMounted(() => {
editor = new E(editorRef.value)
// 配置
Object.assign(editor.config, {
zIndex: 1,
focus: false,
height: props.height,
uploadImgServer: props.action, // 配置 server 接口地址
uploadImgHeaders: {
Authorization: `Bearer ${getPiniaToken()}`,
'X-Requested-With': 'XMLHttpRequest',
},
// 限制上传的最大图片数量
uploadImgMaxLength: 9,
// 单个文件的最大体积限制,默认为 10M
uploadImgMaxSize: 10 * 1024 * 1024, // 10M
onchange(newHtml: string) {
const totalLens = getTextLength(newHtml)
if (totalLens > props.maxLength || newHtml.length > props.maxstrLength) {
message.warning('输入字符过长!')
} else {
。。。。
}
},
onblur() {
。。。
},
})
editor.create()
editor.txt.html(props.modelValue) // 初始化重新设置编辑器内容
/**
* 计算富文本输入框内输入字符的长度(不包含p、img、video等标签,仅计算输入文字的长度)
*/
const getTextLength = (newHtml: string) => {
return newHtml.replace(/<[^>]+>/g, '').length
}
</script>
使用正则表达式将标签替换成空字符串,然后计算输入文字的长度。
上述代码不全,仅展示部分。