使用aurelia-validation创建全局验证规则

时间:2017-01-12 17:13:37

标签: validation aurelia aurelia-validation

我有这样的代码:

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()

感谢您的帮助。

2 个答案:

答案 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');