Присвоение ngModel свойству не определено при переходе из @Input
У меня есть компонент со следующим свойством ввода.
@Input() addressAssociation: AccountAssociation;
у которого есть:address: Address;
Внутри Address есть свойство, к которому я хочу привязать stateCode
,
В моем шаблоне у меня есть это:
<div class="fcol-md-4 fcol-xs-12 form-group" *ngIf="!zipCodeValidating && addressAssociation.address">
<label for="{{name}}State" class="uk-label">State / U.S Territory</label>
<select [(ngModel)]="addressAssociation.address.stateCode"
[disabled]="isListedZipCode"
#addState="ngModel"
required>
<option [ngValue]="state.abbreviation" *ngFor="let state of states">{{state.fullName}} ({{state.abbreviation}})</option>
</select>
</div>
<div class="text--error" *ngIf="addState.errors && addState.touched">
<span *ngIf="addState.errors.required">State is required.</span>
</div>
Проблема в том, что при загрузке шаблона он всегда выдает ошибку: Cannot read property errors of undefined
,
Кроме того, я попытался напечатать переменную с {{addState | json}}
но выдает ошибку круговой ссылки. А также, просто пытаясь напечатать addState, и он никогда не менялся даже при выходе из отключенного состояния и изменении его значения.
Дело в том, что, видимо, переменная #addState
не заполняется ngModel
есть идеи как решить это?
2 ответа
Обновленный ответ:
У вас есть проблема с ограничениями Вы назначаете #addState
внутри *ngIf
, И тогда вы ссылаетесь addState
Вне этого *ngIf
, Это не работает - переменная шаблона будет доступна только внутри той же области, в которой она была создана. Попробуйте перенести свой тестовый div внутри *ngIf
, Поместите это только под </select>
Старый ответ:
Вы должны использовать оператор безопасной навигации ( https://angular.io/guide/template-syntax)
<div class="text--error" *ngIf="addState?.errors && addState?.touched">
<span *ngIf="addState?.errors.required">State is required.</span>
</div>
Я считаю, что ваша ошибка исходит из этого кода
<div class="text--error" *ngIf="addState.errors && addState.touched">
<span *ngIf="addState.errors.required">State is required.</span>
</div>
попробуйте добавить addState к вашему ngIf
*ngIf="addState && addState.errors && addState.touched"
addState не определен при загрузке компонента, поэтому addState.errors выдает эту ошибку