如何从字符串中获取验证器函数

Ada*_*her 2 typescript angular angular5

如何将以下字符串数组转换为类型数组(或函数?或者这些验证器是什么......)

let valStrings: string[] = ["Validators.required", "Validators.maxLength(10)"];
Run Code Online (Sandbox Code Playgroud)

并将其转换为:

let validators: ValidatorFn[] = [ Validators.required, Validators.maxLength(10) ];
Run Code Online (Sandbox Code Playgroud)

我有一个返回验证规则的网络服务。这是尝试集中所有验证规则,以保持服务器和客户端验证同步,因此字符串来自HttpClient具有 JSON 结果的调用。当然,我们仍然将实际的实现分开,但至少两者定义的规则应该相同。

该验证器数组将被传递到 a 中,FormControl以利用 Angular 中的反应式表单进行客户端验证。

eval()这是应该使用的地方吗?

谢谢你-亚当

Mar*_*Nuc 5

通过字符串中的角度代码在服务器上定义验证是非常糟糕的主意。如果您想要动态验证,请为此创建一个 API。喜欢:

validations: {
  name: {
    maxLength: 10,
    required: true
  }
}
Run Code Online (Sandbox Code Playgroud)

Eval 不会帮助您,因为该类没有捆绑在代码中。eval 还会带来安全风险,CSP 应在您的站点上禁用它。

不要将字符串转换为代码。为此你需要一个解析器。当他们更改 Angular 中的验证时,您会做什么?您会更新所有表格吗?

或者想象一下,您将使用 iOS 应用程序连接到您的 API。它必须解析这些字符串 Angular 验证规则。