2016-08-18 2 views
1

У меня есть пароль FormControl с несколькими пользовательскими валидаторов (ниже только один):угловой 2 рефакторинг логики пользовательской проверки в службе

password = new FormControl('', 
    [Validators.required, Validators.minLength(8), 
    this.passwordHasLowerCaseValidator.bind(this)]); 

passwordHasLowerCaseValidator(control: FormControl) { 
    return (...); 
} 

и я хочу что-то называть пользовательские валидаторы из службы, чтобы рефакторинга, рефакторинга мой Регистрация компонент как

constructor(private customValidators:CustomValidators){} 

password = new FormControl('', 
    [Validators.required, Validators.minLength(8), 
    this.customValidators.passwordHasLowerCaseValidator.bind(this)]); 

Я попытался это и он бросил ошибки, я думаю, в форме либо не могли получить к ним доступ или не может передавать данные на него ..

Спасибо!

+0

Просто отправьте еще код, пожалуйста. Является ли ваша служба '@Injectable()'? – mxii

+0

«заброшенные ошибки» практически полезны. Отправьте точное сообщение об ошибке. –

ответ

1

Если изменить валидатор, чтобы вернуть функции валидатор как

passwordHasLowerCaseValidator(customValidators: CustomValidators) { 
    return (control: FormControl) => { 
    return (...); 
    // here you can access "customValidators" 
    } 
} 

и использовать его как

constructor(private customValidators:CustomValidators){} 

password = new FormControl('', 
    [Validators.required, Validators.minLength(8), 
    this.customValidators.passwordHasLowerCaseValidator(customValidators).bind(this)]); 

вы должны получить желаемое поведение.

+0

Спасибо Гюнтер код прекрасно работает, только он должен быть passwordHasLowerCaseValidator (customValidators: FormControl) {...} и вызов this.customValidators.passwordHasLowerCaseValidator (this.password) .bind (это) –

+0

я не думаю да. Эта функция называется 'this.customValidators.passwordHasLowerCaseValidator (customValidators)' где 'customValidators' имеет тип' CustomValidators'. Возвращенная функция, которая фактически передается как validator, имеет параметр 'control: FormControl', требуемый валидаторами. Возможно, я неправильно истолковал что-то из вашего вопроса, но если он работает по своему желанию, я полагаю, что мои предположения были правильными ;-) –

+0

где находятся пользовательские валидаторы? Я должен указать, что я использую RC4 (текущая угловая версия в ionic 2 beta11) код в моем предыдущем комментарии работает нормально, хотя ... не уверен, что он будет тестируемым ... –

Смежные вопросы