Angular, есть ли способ "markAsTouched" поле без формы? - PullRequest
0 голосов
/ 23 января 2020

Я уже знаю, что элементы INPUT внутри FormControl можно пометить dirt или touched, вызвав любой из следующих методов (возможно, больше): control.markAsTouched(); group.markAsTouched(); form.get('control-name').markAsTouched(); form.markAllAsTouched(); form.controls[someIndex].markAsTouched();

Однако я могу видите, что метод markAsTouched, кажется, вызывается, когда ввод focus, а затем blur.

Есть ли способ достичь того же результата, просто нажав кнопку?


Здесь вы можете увидеть текущее стандартное поведение без формы , также вы можете проверить его самостоятельно в следующем живом примере:

https://stackblitz.com/edit/angular-peq11f

Мне кажется очевидным, что это поведение должно быть доступно для запуска по коду, а не только когда blur запускается событие

Что-то как это:

<input #myInput>
<button (click)="myInput.markAsTouched()">click</button>

1 Ответ

2 голосов
/ 24 января 2020

Вы можете использовать уникальный formControl <input [formControl]="control"> и markAsTouched

<input [formControl]="control">
<button (click)="control.markAsTouched()">click</button>
{{control.touched}}

Где вы находитесь в .ts

// as a property
control = new FormControl();

// or in a function
this.control.markAsTouched();

A FormControl может принадлежать FormGroup или нет. кроме того, нет необходимости иметь тег input. Мы используем ввод тега для изменения значения, но если вы удалите input, элемент управления будет помечен как затронутый

...