我有这样的代码:
import {ValidationRules} from 'aurleia-validation'
export class EmailDialog{
email = null
activate(item){
email = item
ValidationRules.ensure(i => i.emailAddress)
.required()
.email()
... // other code
}
我想添加一个新的.email()
验证函数,该函数覆盖现有的验证函数,或者只是在我的应用程序中使用ValidationRules的任何地方都有一个新名称(即.emailExp()
)。
我见过的代码可以让你像这样添加自定义规则:
ValidationRules.customRule('emailExp',(value,obj) => {},"")
然后您可以使用
进行调用ValidationRules.ensure(i => i.emailAddress).satisfiesRule('emailExp')
但是,我不确定在哪里放置该代码以使其在全球范围内可用。我只是在app.js中添加自定义规则吗?这会使自定义规则可用于导入ValidationRules的任何VM吗?
有没有办法扩展ValidationRules的流体API,以便我可以执行以下操作:
ValidationRules.ensure(i => i.emailAddress).emailExp()
感谢您的帮助。
答案 0 :(得分:2)
你想把它放在app.js
的构造函数中。通过将其放在这里,它将在全球范围内提供。
您可以在我的应用程序中关注此示例:
import { ValidationRules } from 'aurelia-validation';
export class App {
constructor() {
ValidationRules.customRule(
'integerRange',
(value, obj, min, max) => value === null || value === undefined
|| Number.isInteger(1 * value) && value >= min && value <= max,
null,
(min, max) => ({ min, max })
);
}
}
用法(在任何viewmodel中):
ValidationRules
.ensure('cat_value_orig').required().maxLength(255)
.ensure('cat_value_tran').minLength(2).maxLength(255)
.ensure('cat_order').satisfiesRule('integerRange', 0, 100)
.on(this);
答案 1 :(得分:0)
另一种解决方案是为每个自定义验证创建文件,然后在main.ts
中注册。
1)创建一个文件供您验证,我建议使用以下路径:resources/custom-validations
import { ValidationRules } from "aurelia-validation";
function registerCustomRule() {
ValidationRules.customRule(
'integerRange',
(value, obj, min, max) => value === null || value === undefined
|| Number.isInteger(1 * value) && value >= min && value <= max,
null,
(min, max) => ({ min, max })
);
}
export default registerCustomRule();
2)在创建验证的路径内,创建另一个文件以注册验证resources/custom-validations/index.ts
import './integer-range-validation'; //<--- file created in step 1
import { FrameworkConfiguration } from 'aurelia-framework';
export function configure(config: FrameworkConfiguration) {
}
3)在main.ts
中,您告诉aurelia使用您的路径
aurelia.use
.standardConfiguration()
.plugin('aurelia-validation')
.feature('extensions')
.feature('resources/custom-validations')
.feature('resources');