集中Aurela验证逻辑 [英] Centralize Aurelia validation logic

查看:14
本文介绍了集中Aurela验证逻辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望将验证逻辑集中在@Enure中,但我不确定如何做到这一点。 这是文档中的一个示例:

import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';

export class Person {
  static inject() { return [Validation];}
  
  //I want to inject validation logic here instead of using function(it){...}
  @ensure(function(it){ it.isNotEmpty().hasLengthBetween(3,10) })
    firstName = 'John';

  constructor(validation) {
    this.validation = validation.on(this);
  }
}

我想将上面的代码更改为如下所示:

import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import {UserValidation} from 'user/userValidation'; //custom validation logic here

export class Person {
  static inject() { return [Validation];}
  
  //can I do something like this instead of using function(it){...}?
  @ensure(UserValidation.firstName)
    firstName = 'John';

  constructor(validation) {
    this.validation = validation.on(this);
  }
}

如果我们只需要在一个页面上收集名字,那么我们根本不必这样做,但由于我们可能需要让用户在多个不同的页面上输入他们的名字,所以我们希望将验证逻辑集中在某个地方,这样我们就不必将其复制和粘贴到任何地方。我们也不想创建"名字组件",因为每个页面上的UI都不同,所以我们只想重用验证逻辑。

更新: 我在Aurela讨论中问了这个问题,并被要求尝试以下方法。

//userValidation.js
export function firstName(it){ it.isNotEmpty().hasLengthBetween(3,10)};

import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import * as userValidation from 'user/userValidation';

export class Person {
  static inject() { return [Validation];}
  
  @ensure(userValidation.firstName)
    firstName = 'John';

  constructor(validation) {
    this.validation = validation.on(this);
  }
}

但我收到此错误:未处理的承诺拒绝错误:实例化人员时出错。你知道我该怎么解决这个问题吗?

推荐答案

实际上,以下代码起作用了!

//userValidation.js
export function firstName(it){ it.isNotEmpty().hasLengthBetween(3,10)};
//person.js
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import * as userValidation from 'user/userValidation';

export class Person {
  static inject() { return [Validation];}
  
  @ensure(userValidation.firstName)
    firstName = 'John';

  constructor(validation) {
    this.validation = validation.on(this);
  }
}

这篇关于集中Aurela验证逻辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆