Angular проблема в validators.pattern при динамическом добавлении - PullRequest
0 голосов
/ 05 августа 2020

У меня проблема с использованием validators.pattern реактивной формы. Если я добавлю валидацию в группу formbuilder, она будет работать нормально, что означает, что поле недействительно, когда шаблон регулярного выражения не соблюдается. Но когда я добавляю проверку динамически в момент отправки, если я ввожу значение в неправильном шаблоне, он говорит, что ввод действителен, а когда я добавляю значение в правильный шаблон, он говорит, что он недействителен. o_O

  1. Валидатор в конструкторе форм
  form = this.formBuilder.group({
    field: [null, Validators.pattern('^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$')]
  });
Валидатор добавляется динамически:
this.form.controls[field].setValidators([Validators.pattern('/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/')]);
this.form.controls[field].updateValueAndValidity();

Единственное различие, которое я обнаружил, заключается в том, что мне нужно добавить / во втором методе. Если я удалю / , валидатор не будет работать.

Я тоже пробовал this.form.get('field').setValidators..., но поведение было таким же.

Вы, ребята, знаете, что я делаю не так?

Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

Это просто не удается. Пожалуйста, взгляните на это: https://github.com/angular/angular/blob/2ab8e88924532ecd8a3459b8cb11b4ce9b7f847b/packages/forms/src/validators.ts#L349 -L406 .

Angular добавляет ^ и $ к вашей строке, если вы все равно передали строку. Ваша строка просто не работает. https://github.com/angular/angular/blob/2ab8e88924532ecd8a3459b8cb11b4ce9b7f847b/packages/forms/src/validators.ts#L387 и https://github.com/angular/angular/blob/2ab8e88924532ecd8a3459b8cb11b4ce9b7f847b/packages/forms/src/validators.ts#L391

...