Size: a a a

Angular - русскоговорящее сообщество

2016 August 02

AK

Alexey Krasman in Angular - русскоговорящее сообщество
тут то же самое, вместо FormBuilder в котором вы руками валидаторы добавляете за вас это сделают директивы
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
да это изврощение - вот как в формах от модели это элегантно решаеться

this.form = fb.group({
 name: ['', Validators.required],
 email: ['', Validators.required]
 matchingPassword: fb.group({
   password: ['', Validators.required],
   confirmPassword: ['', Validators.required]
 }, {validator: this.areEqual})  <--------
});
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
в чем тут элегантность? в том что метод areEqual будет жить в компоненте формы? и не будет переиспользоваться в других местах?
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Alexey Krasman
в чем тут элегантность? в том что метод areEqual будет жить в компоненте формы? и не будет переиспользоваться в других местах?
Это пример - валидаторы легко выносяться в отдельные классы
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
да, и для этого в ng2 действительно есть отдельные классы
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
почему их не использовать?
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
this.form = fb.group({
 name: ['', Validators.required],
 email: ['', Validators.required]
 matchingPassword: fb.group({
   password: ['', Validators.required],
   confirmPassword: ['', Validators.required]
 }, {validator: MYCustomValidators.areEqual })  <--------
});
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
хотя дело вкуса конечно, я не настаиваю разумеется на том что надо  делать только так
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Еще раз как в формах от шаблона присобачить кастомный валидатор для 2х полей сразу? Я пока не видел ни 1 простого решения. Увижу соглашусь :)
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
просто я думал вы приведете пример где без model forms никак не реализовать
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Alexey Krasman
просто я думал вы приведете пример где без model forms никак не реализовать
ну вот как кроссвалидацию сделать?
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
import {Directive, forwardRef} from '@angular/core'
import {NG_VALIDATORS, FormControl} from '@angular/forms'

function validateDomainFactory() {
 return (c: FormControl) => {
   let VALIDATION_REGEXP = /^([a-zA-Z0-9][a-zA-Z0-9-]+\.)?[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/i

   return VALIDATION_REGEXP.test(c.value) ? null : {
     validateDomain: {
       valid: false
     }
   }
 }
}

@Directive({
 selector: '[validateDomain][ngModel],[validateDomain][formControl]',
 providers: [
   { provide: NG_VALIDATORS, useExisting: forwardRef(() => DomainNameValidator), multi: true }
 ]
})
export class DomainNameValidator {
@Input() secondFiled: FormControl // <<<<--- сюда передаем второй контол от которого зависим
 validator: Function

 constructor(/*Dependency Injection here*/) {
   this.validator = validateDomainFactory()
 }

 validate(c: FormControl) {
   return this.validator(c)
 }
}
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
валидаторы это просто директивы
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
в них можно передать другой компонент от которого зависит текущий
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
и реализовать логику
источник

Sergey Фrolov in Angular - русскоговорящее сообщество
Мне просто удобнее держать всю логику в контроллерах, а не в темплейтах
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Блин у валидатора появляеться прямая ссылка на класс компонента - как-то не архитектурненько. Больше на костыль похоже
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
логика не в темплейте, логика в отдельном файле валидатора, в темплейте мы только декларативно биндим эту логику туда где надо
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
в ng1 по-моему так и писались валидаторы кастомные
источник

AK

Alexey Krasman in Angular - русскоговорящее сообщество
всякие confirm-password валидаторы и т.д
источник