在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。
input
框,一个是公司名
,一个是付款卡号
,在提交表单时,有如下校验规则:公司名不能为空且长度不能超过12;付款卡号不能为空且长度不能超过20公司名companyName 付款卡号payAccount
submit: function() {
if (!this.companyName) {
alert(‘公司名不能为空‘)
return
}
if (!this.payAccount) {
alert(‘付款卡号不能为空‘)
return
}
if (this.companyName.length > 12) {
alert(‘公司名不能超过12个字符‘)
return
}
if (this.payAccount.length > 12) {
alert(‘付款卡号不能超过12个字符‘)
return
}
}
class Validator {
// 存放 -- 所有规则校验的结果
validateResult = []
// 存放 -- 所有的校验规则
rules = {
isEmpty: function(value, errMsg) {
if(!value) {
return errMsg
}
},
maxLength: function(value, length, errMsg) {
if(value.trim().length > length) {
return errMsg
}
}
}
/**
* value:要校验的值
* rules:该值要用到哪些校验规则
*/
check(value, rules) {
for(let i = 0; i < rules.length; i++) {
let oRule = rules[0]
let ruleArr= oRule.rule.split(‘:‘)
let errMsg = oRule.errMsg
let rule = ruleArr.shift()
ruleArr.unshift(value)
ruleArr.push(errMsg)
// 遍历规则后,将结果扔进数组
this.validateResult.push(
this.rules[rule].appay(value, ruleArr)
)
}
}
// 遍历结果数组,若有值,则返回错误提示信息
checkResult() {
for(let i = 0; i < validateResult.length; i++) {
let errMsg = this.validateResult[i]
if (errMsg) return errMsg
}
}
}
export {
Validator
}
import { Validator } from ‘@/validate.js‘
submitForm: function() {
const validator = new Validator()
validator.check(this.companyName, [{
rule: ‘isEmpty‘,
errMsg: ‘公司名不能为空‘
},{
rule: ‘maxLength: 12‘,
errMsg: ‘公司名不能超过12个字符‘
}])
validator.check(this.payAccount, [{
rule: ‘isEmpty‘,
errMsg: ‘付款卡号不能为空‘
},{
rule: ‘maxLength: 12‘,
errMsg: ‘付款卡号不能超过12个字符‘
}])
let errMsg = validator.checkResult()
if(errMsg) {
alert(errMsg)
return
}
}
原文:https://www.cnblogs.com/pleaseAnswer/p/14619962.html