Обновление переменной в компоненте Angular при изменении другой переменной
Я пытаюсь что-то вроде этого:
component.ts
displayName: string;
email: string = `user+${this.displayName}@domain.com`;
component.html
<input type="text" [(ngModel)]="displayName" name="displayName">
<input type="email" [value]="email" name="email">
email
обновляется один раз, когда приложение загружено, но не когда displayName
изменения.
Нужно ли использовать EventEmitter
или же ngOnChanges
или что-нибудь еще?
2 ответа
Причина в том, что displayName
свойство используется для инициализации email
значение свойства, следовательно, последовательные чтения email
свойство возвращает одно и то же значение, независимо от того, displayName
изменено или нет. вместо этого вам нужно написать геттер для email
свойство и возвращаемая стоимость рассчитываются на основе displayName
Попробуйте следовать
get email(): string { return `user+${this.displayName}@domain.com`; }
Я смог решить это с помощью ngModelCange
component.ts
displayName: string;
email: string = null;
onKey(event: any) {
this.email = (this.displayName === undefined || this.displayName === null) ? null : `user+${this.displayName}@domain.com`;
}
component.html
<input type="text" [(ngModel)]="displayName" (ngModelChange)="onKey($event)" name="displayName">
<input type="email" [value]="email" name="email">
Вы также можете использовать keydown
вместо ngModelChange
, У него такое же поведение, по крайней мере, в этом случае.