使用装饰器在TypeScript的Angular 2中进行验证

Wil*_*iam 5 typescript angular2-forms angular

我正在一个项目中使用Angular 2和NodeJS和TypeScript。

Angular2使用装饰器定义组件。我希望能够以相同的方式在域对象上表达验证逻辑。这将很有用,因为我可以一次表达一次验证规则,并将其用于服务器端和客户端。

而不是像这样在标记中表达必填字段:

<input required [(ng-model)]="selectedHero.name"></input>
Run Code Online (Sandbox Code Playgroud)

我想这样做:

class Hero {
    id: number;

    @Required
    name: string;
}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何编写指令以读取元数据,以便将必需的属性应用于输入元素以及在NodeJS中创建验证错误。任何指导表示赞赏。谢谢您的帮助。

Phi*_*ger 3

该问题由两件事组成: - 基于装饰器验证模型 - 在 UI 中显示结果

首先,您可以使用任何打字稿验证器。例如类验证器。第二部分我仍在试图弄清楚。

编辑:研究之后,我会这样做:使用 Class Validator 作为装饰器,使用 Angular 2 表单构建器创建一个表单,附加到表单的 valueChanged 事件,在事件中执行验证器并为每个设置设置您收到的验证错误,相应的表单控制错误。(查找 setErrors 方法。)

请记住,表单中的任何更改现在都会重新评估所有输入。这可能需要改进。此外,我会将所有逻辑抽象为一个服务,该服务将提供一个基于打字稿类的表单并连接所有需要的东西。