Skip to content

TextareaField 标签文本域

基础用法

  • 自带标签与多行文本域的字段组件,相当于"标签 + textarea + 错误提示"的一体化封装。
  • 默认垂直布局(标签在上),maxlength 生效时右下角自动显示字数统计胶囊;auto-height 可由内容自动撑开高度。
  • 放在 sn-form 内设置 field + rule 即参与整表校验,无需再包一层 sn-form-field
  • 尺寸与颜色属性支持 $ 简写(如 height="$120"label-color="$primaryDark"),随风格乘数与主题自动缩放换色。
vue
<template>
	<sn-textarea-field v-model="value" label="商品评价" placeholder="说说你的使用感受" />
	<sn-textarea-field v-model="comment" label="评论" :maxlength="50" placeholder="最多 50 字" />
</template>

<script lang="uts" setup>
	const value = ref<string>('')
	const comment = ref<string>('')
</script>

更多演示请下载 demo 查看

高度与字数统计

默认高度 100pxheight 可自定义;设置 auto-height 后高度由内容撑开(height 失效)。maxlength 限制最大字数并在右下角显示"当前字数/最大字数"计数器,可用 counter 插槽或 counterSize / counterColor / counterBgColor 等属性定制。

vue
<template>
	<sn-textarea-field v-model="value1" label="动态高度" auto-height placeholder="输入多行试试,自动撑开" />
	<sn-textarea-field v-model="value2" direction="horizontal" label="吐槽" height="80px" :maxlength="200" placeholder="横向标签在左" />
</template>

<script lang="uts" setup>
	const value1 = ref<string>('')
	const value2 = ref<string>('')
</script>

配合 sn-form 使用

设置 fieldrule 后直接参与 sn-form 整表校验,校验失败信息通过 error 属性展示。

vue
<template>
	<sn-form ref="formRef" v-model="formData">
		<sn-textarea-field field="remark" :rule="remarkRule" v-model="(formData['remark'] as string)" label="备注" :error="getFieldError('remark')" :maxlength="100" placeholder="备注最多 100 字" />
	</sn-form>
	<sn-button text="提交" type="primary" custom-style="margin-top:16px;" @click="onFormSubmit" />
</template>

<script lang="uts" setup>
	import type { SnFormItemRule, SnFormItemVerifyResult, SnFormValidResult } from '@/uni_modules/sinle-ui'

	const formRef = ref<SnTextareaFieldComponentPublicInstance | null>(null)
	const formData = ref<UTSJSONObject>({
		remark: ''
	} as UTSJSONObject)
	const failResults = ref<SnFormItemVerifyResult[]>([])

	function getFieldError(field: string): string {
		const list = failResults.value
		for (let i = 0; i < list.length; i++) {
			if (list[i].field == field) {
				return list[i].message ?? ''
			}
		}
		return ''
	}

	const remarkRule = ref<SnFormItemRule>({
		max: 100,
		message: '备注最多 100 字'
	} as SnFormItemRule)

	function onFormSubmit(): void {
		formRef.value?.$callMethod('submit', {
			success: () => {
				failResults.value = []
			},
			fail: (results: SnFormItemVerifyResult[]) => {
				failResults.value = results
			}
		} as SnFormValidResult)
	}
</script>

属性

参数说明类型默认值可选值
v-model绑定值String''-
direction布局方向,horizontal 标签在左、vertical 标签在上Stringverticalhorizontal | vertical
label标签文字String''-
labelSize标签字体大小String | Number''(默认 14px × 字体乘数)-
labelColor标签颜色String''(默认主题 title 色)-
labelWidth横向布局时标签宽度String | Number''(默认 80px × 间距乘数)-
labelAlign标签文字水平对齐Stringleftleft | right | center
labelJustify标签在容器内的竖向对齐Stringtoptop | center | bottom
required是否必填,标签后追加红色 * 标记Booleanfalsetrue | false
error错误提示文字(存在 error 插槽时不显示)String''-
errorSize错误文字大小String | Number''(默认 12px × 字体乘数)-
errorColor错误文字颜色String''(默认主题 error 色)-
columnGap标签与内容的间距String | Number''(默认 12px × 间距乘数)-
name表单的控件名称,作为键值对的一部分与表单一同提交String''-
field表单字段名,非空且位于 sn-form 内时注册参与整表校验String''-
rule校验规则,配合 field 使用SnFormItemRule{}-
height文本域高度(开启 auto-height 后失效)String | Number100px-
placeholder文本域为空时的占位符String''-
placeholderStyle占位符内联样式String''-
placeholderClass占位符外部类String''-
maxlength最大输入长度,-1 表示不限制(生效时显示字数统计)String | Number-1-
focus获取焦点Booleanfalsetrue | false
autoFocus自动获取焦点,与 focus 相比只在首次生效Booleanfalsetrue | false
autoHeight是否自动增高,由内容撑开高度Booleanfalsetrue | false
cursor指定聚焦时的光标位置,-1 表示不指定String | Number-1-
cursorColor光标颜色String''-
cursorSpacing光标与键盘的距离(px)String | Number0-
selectionStart光标起始位置,自动聚焦时有效,需与 selectionEnd 搭配String | Number-1-
selectionEnd光标结束位置,自动聚焦时有效,需与 selectionStart 搭配String | Number-1-
confirmType键盘右下角按钮的文字Stringreturn-
confirmHold点击键盘右下角按钮时是否保持键盘不收起Booleanfalsetrue | false
holdKeyboard聚焦时点击页面不收起键盘Booleanfalsetrue | false
adjustPosition键盘弹起时是否自动上推页面Booleantruetrue | false
inputmode输入模式,影响键盘类型Stringtext-
fixed是否为固定定位区域内的文本域(如 popup 内使用需开启)Booleanfalsetrue | false
showConfirmBar是否显示键盘上方的完成栏Booleantruetrue | false
disabled是否禁用,禁用后不可输入且背景、文字使用禁用配色Booleanfalsetrue | false
readonly是否只读,只读时颜色不变Booleanfalsetrue | false
loading是否加载中,右上角显示加载指示器(延迟 100ms 显示避免闪烁)Booleanfalsetrue | false
loadingClass加载指示器外部类String''-
loadingStyle加载指示器样式UTSJSONObject | String''-
showBorder是否显示边框Booleantruetrue | false
showActiveBorder聚焦时是否切换为激活边框颜色Booleanfalsetrue | false
borderColor边框颜色String''(默认透明)-
activeBorderColor聚焦激活时的边框颜色String''(默认主题 primary 色)-
bgColor背景颜色String''(默认主题 front 色)-
activeBgColor聚焦时的背景颜色String''(默认主题 front 色)-
disabledBgColor禁用时的背景颜色String''(默认主题 disabled 色)-
textColor输入文字颜色String''(默认主题 text 色)-
disabledTextColor禁用时的文字颜色String''(默认主题 disabledText 色)-
borderRadius圆角大小String | Number''(默认 8px × 圆角乘数)-
borderWidth边框宽度String | Number2-
padding内边距String8px 13px-
textSize输入文字大小String | Number''(默认 14px × 字体乘数)-
textFont输入文字字体String''-
align输入文字对齐方式Stringleftleft | center | right
counterSize字数统计文字大小String | Number''(默认 12px × 字体乘数)-
counterColor字数统计文字颜色String''(默认主题 text 色)-
counterBgColor字数统计背景颜色String''(默认主题 info 色)-
labelStyle标签节点自定义样式UTSJSONObject | String''-
labelClass标签节点外部类String''-
errorStyle错误节点自定义样式UTSJSONObject | String''-
errorClass错误节点外部类String''-
inputStyle自定义文本域本体样式UTSJSONObject | String''-
customStyle自定义根节点样式UTSJSONObject | String''-
customClass根节点外部类String''-
counterClass字数统计节点外部类String''-
counterStyle字数统计节点自定义样式UTSJSONObject | String''-

sn-form-itemrule 属性校验规则。

名称类型必填描述
typeString字段类型(如 string / number / array / url / email / phone 等)
requiredBoolean是否必填
messageString校验失败提示信息
patternRegExp正则校验规则
minNumber最小长度
maxNumber最大长度
lenNumber固定长度
enumany[]枚举校验,值须在列表内
transform(value: any) => any校验前对值进行转换
valid(value: any) => string自定义校验函数,返回非空字符串表示失败信息

事件

名称类型说明
input(event: UniInputEvent) => Void键盘输入时触发,event.detail = { value, cursor }
focus(event: UniTextareaFocusEvent) => Void文本域聚焦时触发
blur(event: UniTextareaBlurEvent) => Void文本域失去焦点时触发
confirm(event: UniInputConfirmEvent) => Void点击键盘右下角按钮时触发
linechange(event: UniTextareaLineChangeEvent) => Void输入行数变化时触发
keyboardheightchange(event: UniInputKeyboardHeightChangeEvent) => Void键盘高度变化时触发

方法

名称参数返回值描述
verify(value: any, callback: (res: SnFormItemVerifyResult) => Void)-按 rule 校验当前表单项并回调结果;一般由 sn-form 自动调用,无需手动调用

插槽

名称说明
label自定义标签内容,替换 label 属性文字
counter自定义字数统计内容,替换默认的计数胶囊
error自定义错误提示内容,替换 error 属性文字

使用 MIT 协议