计算属性适合封装响应式校验逻辑——每个字段对应一个返回valid/message的计算属性,链式依赖实现跨字段校验,纯函数确保无副作用,函数工厂提升规则复用性。

计算属性本身不直接执行校验,但它非常适合封装和响应式地暴露校验结果——把验证逻辑写在 computed 中,配合表单字段的响应式数据,就能实现零延迟、可复用、易测试的实时校验。
把校验规则抽成独立计算属性
每个表单项对应一个计算属性,返回布尔值或对象(含 valid、message 等字段)。这样既解耦又清晰,比如邮箱字段:
- 定义
email数据和emailRule计算属性 - 在
emailRule中判断非空 + 正则匹配 - 模板中直接绑定
:class="{ 'error': !emailRule.valid }"或显示emailRule.message
组合多个规则时用计算属性链式依赖
当某项校验依赖其他字段(如“确认密码”需匹配“密码”),就把依赖字段写进计算属性的 getter 中。Vue 会自动追踪响应式依赖:
- 定义
password和confirmPassword两个 data 字段 - 创建
confirmPasswordRule,内部同时读取password和confirmPassword - 只要任一值变化,该计算属性立刻重求值,无需手动监听
避免副作用,校验逻辑只负责“判断”,不修改状态
计算属性必须是纯函数:只读取响应式数据,不调用 this.$set、不发请求、不修改 data。错误示例:if (!this.email) this.errors.email = '必填' —— 这破坏了响应式链条,也违背计算属性设计初衷。
- 所有提示信息、错误标记都通过计算属性返回,由模板消费
- 若需统一收集错误,可用另一个计算属性聚合各字段的
valid状态 - 提交前校验,直接判断
allFieldsValid即可,无需重复逻辑
提升可维护性:用函数工厂封装通用规则
把常用校验(如最小长度、手机号格式)写成返回函数的工厂,再在计算属性中调用,兼顾复用与定制:
- 定义
minLength(3)返回一个校验函数,接收值后返回结果对象 - 在
usernameRule中调用它:return minLength(3)(this.username) - 不同字段复用同一规则,参数灵活,逻辑集中,改一处全生效

















