Я пишу пользовательский компонент формы, который в основном представляет собой текстовое поле, которое изменится на метку или текстовое поле в зависимости от конкретного свойства.
Таким образом, если пользовательский компонент установлен только для чтения, текстовое поле должно быть скрыто и должна отображаться метка.
Эта логика скрытия и показа работает безупречно. Однако элемент dom, отвечающий за отображение сообщений проверки, выдает ошибку, когда элемент управления не найден.
<span class="form-control-readonly" *ngIf="readonly == true" #valuelabel>
{{inputModel}}
</span>
<input
*ngIf="readonly != true"
#control="ngModel"
[id]="id"
type="text"
class="form-control"
[placeholder]="caption"
[(ngModel)]="inputModel"
(ngModelChange)="onTextChange()"
[maxlength]="maxLength"
[required]="isRequired === true ? '' : null"
[ngClass]="{'invalid': !control.valid, 'valid': control.valid }">
<div *ngIf="(readonly == false) && (control.invalid && hideFeedback === false)" class="invalid-feedback">
<div *ngIf="(readonly == false) && (control.errors.required)">{{ caption }} is required</div>
<div *ngIf="(readonly == false) && (control.errors.maxlength)">{{ caption }} should be {{ control.errors.maxlength.requiredLength }} characters long </div>
</div>
control.errors в последнем div вызывает ошибку «Не удается прочитать свойство 'invalid' of undefined" ». Вероятно, потому что контроль не существует в дом.
Когда ngIf на входе изменяется на скрытый, он начинает работать, но я хочу добиться этого с помощью ngIf.