我正在尝试使用JavaScript创建用于输入验证的类。
例如,我创建的ExampleValidators
类:
export class ExampleValidator {
private args: any;
private errors = [];
constructor(argsz) {
this.args = argsz;
}
public required(inputName: string, customErrorMessage: string) {
if (this.hasErrors(inputName)) return this;
if (this.args.controls[inputName].value === null) {
customErrorMessage = customErrorMessage ? customErrorMessage : inputName + ' Is required';
this.addErrors(inputName, customErrorMessage);
}
return this;
}
public message(message: string) {
this.errors = [];
return this.errors = [message]
}
private addErrors(inputName: string, errorMessage: string) {
this.errors[inputName] = errorMessage;
}
private hasErrors(inputName: string) {
const errors = this.errors[inputName];
return typeof errors === 'undefined' ? false : true;
}
}
之后,我尝试通过一条消息来使用该类:
private isValid() {
this.exampleValidator.required('loginDateFrom');
this.exampleValidator.required('loginDateTo').message('An example message: 02');
return this.exampleValidator.passes();
}
但是在显示后,该错误并未特别出现:必需(“ loginDateTo”),但更改了出现的整体错误。
我怎么知道使用“自定义消息”来自引用:required(“ loginDateTo”),以便“自定义错误消息”对“ required”(“ loginDateFrom”)无效?
我试过使用:
this.exampleValidator ('loginDateTo'). message ('loginDateTo', 'Some Message').
要么
this.exampleValidator ('loginDateTo', 'Some Message');
它可以工作,但是我只想尝试使用自定义消息,如上所述:
this.exampleValidator ('loginDateTo'). message ('Some Message')
如何从方法“消息”中的上一个方法“必需”获得引用?
还是有另一种方法?
先感谢您。
最佳答案
当您已经验证require
调用上的检查时,此后将无法添加消息。但是,您只能在调用require
时创建规则列表,然后在调用passes()
时对它们求值。这样,require
可以返回对规则的引用,并且可以在应用规则之前对其进行修改:
class Rule {
public _message = "";
constructor(public readonly name: string) {}
message(msg) { this._message = msg; }
validate(obj) {
if(obj[this.name]) return null;
// an error occurs:
return this._message || `${this.name} is required`;
}
}
class Validator {
rules: Rule[] = [];
require(name) {
const rule = new Rule(name);
this.rules.push(rule);
return rule;
}
passes() {
const errors = this.rules.map(it => it.validate(/*...*/)).filter(it => it);
const isValid = !errors.length;
//...
}
}
关于javascript - 从JavaScript/TypeScript类中的另一个方法获取引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56197891/