Если я вас правильно понимаю, вы хотите выровнять имена друг с другом на основе выбора,
То, что вы ошибочно реализовали, является функцией фильтра,
Ваша функция фильтра должна выглядеть следующим образомТаким образом,
const newName: string = this.groupeBeatles.filter(membre => membre.prenom === $value)[0].nom;
this.nomCourant=newName;
вы фактически присваиваете значения внутри фильтра, что неправильно, фильтр предназначен для отфильтровывания значений, поэтому вам необходимо вернуть значения true или false. рекомендуется прочитать, чтобы понять фильтр
Если вы хотите применить к обоим, вы можете сделать что-то вроде этого
synchroMembre($value, typeChange) {
if (typeChange === 'pren') {
const newName: string = this.groupeBeatles.filter(membre => membre.prenom === $value)[0].nom;
this.nomCourant = newName;
} else {
const newName: string = this.groupeBeatles.filter(membre => membre.nom === $value)[0].prenom;
this.prenomCourant = newName;
}
}
и передать значения
<form #monForm="ngForm">
<div class="form-group">
<label for="prenom">Prénom</label>
<select class="form-control" id="prenom" [ngModel]="prenomCourant" (ngModelChange)="synchroMembre($event,'pren')" required name="prenom">
<option *ngFor="let pren of prenoms" [value]="pren">{{ pren }}</option>
</select>
</div>
<div class="form-group">
<label for="nom">Nom</label>
<select class="form-control" id="nom" [(ngModel)]="nomCourant" (ngModelChange)="synchroMembre($event,'nom')" required name="nom">
<option *ngFor="let nom of noms" [value]="nom">{{nom}}</option>
</select>
</div>
</form>
Демо