课程名称:Vue3 + TS仿知乎专栏企业级项目
课程章节:第5章
主讲老师:张轩
今天学习Form表单的定义实现
表单的验证规则定义使用type和message作为判断一句,每个表单项的Input项会对每个字段逐一检验是否满足规则。
Vue2和Vue3的双向绑定方式有所改变,因为input有些触发改动的方法不一样,比如有的是change,有的是checked,使用onUpdate:modelValue会比较统一。比如
数据更新的方法:
const updateValue = (e: KeyboardEvent) => { const targetValue = (e.target as HTMLInputElement).value inputRef.val = targetValue context.emit('update:modelValue', targetValue) }
input用ref值绑定,并设置变更的方法来监听
<input type="text" class="form-control" :class="{ 'is-invalid': inputRef.error }" :value="inputRef.val" @blur="validateInput" @input="updateValue" />
ValidateInput上一层是Form表单,所以需要用到插槽的方式来嵌入,并且使用具名插槽的方式指定位置,比如替换掉提交按钮。
在之前的课程学到了很方便的provide/inject的数据处理方式,课程寻找的外援mitt也非常方便,API也是简单的on, off, emit,不过在TS类型的定义上容易踩坑。
对于检验的每一项,如果一个条件没有满足,可能就直接停止校验了,避免这种bug可以使用map,然后紧接着every来直接返回值。