Проблема с вашим кодом здесь:
<div *ngIf="(!key.untouched) || !(key.pristine) && !key.valid">
Enter valid {{key}} detail
</div>
key
- это просто (строка?) Ключ ваших данных, и вы используете его как FormControl
объект, который, очевидно, не 'т работа.Чтобы использовать такие свойства, как untouched
, pristine
и valid
, вам необходимо обратиться к FormControl
.
Здесь - это быстрый стек, который показывает, как вы можете решить эту проблему.
Также я думаю, что ваша проверка на самом деле не работает так, как она реализована в настоящее время. В стеке я реализовал только фиктивную проверку, которая проверяет длину строки, но демонстрирует, как она работает (только показывает ошибкусообщение для поля, которое на самом деле недопустимо, например, длина равна 0).
А что касается вашего вопроса, почему ваше сообщение об ошибке всегда отображается, то это потому, что условие (!key.untouched) || !(key.pristine) && !key.valid
всегда будет иметь значение true, если key
строка.'myKey'.untouched
оценивается как undefined
, что превращает его в !undefined
, что становится истинным.