Как получить функцию валидатора из строки - PullRequest
0 голосов
/ 09 октября 2018

Как я могу преобразовать следующий строковый массив в массив типов (или функций?, Или какими бы ни были эти валидаторы ...) ?

let valStrings: string[] = ["Validators.required", "Validators.maxLength(10)"];

И преобразовать его в:

let validators: ValidatorFn[] = [ Validators.required, Validators.maxLength(10) ];

У меня есть веб-сервис, возвращающий правила проверки.Это попытка централизовать все наши правила валидации, чтобы синхронизировать валидацию сервера и клиента, поэтому строки поступают из вызова HttpClient с результатом JSON.Конечно, мы по-прежнему разделяем фактические реализации, но по крайней мере определенные правила должны быть одинаковыми для обоих.

Этот массив валидаторов будет передан в FormControl для использования реактивных форм в Angular для клиента.проверка стороны.

Это место, где следует использовать eval()?

Спасибо -Адам

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

единственный способ, который я знаю, это использование if

let valStrings: string[] = ["Validators.required", "Validators.maxLength(10)"];
let validators=valString.map(x=>{
    switch (x)
    {
        if (x=="Validators.required")
            return Validators.required;
        if (x.startsWith("Validators.maxLength")
        {
            let length=+(x.split('(')[1].split(')')[0]);
            return Validators.maxLength(length)
        }
    }
});
0 голосов
/ 09 октября 2018

Определение проверки на сервере по коду angular в строке - очень плохая идея.Если вы хотите динамические проверки, создайте для этого API.Например:

validations: {
  name: {
    maxLength: 10,
    required: true
  }
}

Eval не поможет вам, потому что этот класс не включен в код.Также eval создает угрозу безопасности, и CSP должен отключить его на вашем сайте.

Не преобразовывать строку в код.Вам понадобится парсер для этого.И что вы будете делать, когда они изменят проверки в Angular?Будете ли вы обновлять все свои формы?

Или представьте, что вы хотите подключить приложение iOS к своему API.Это должно было бы проанализировать эти строковые правила проверки углов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...