Mon exigence était de montrer la valeur sélectionnée dans la zone d'entrée et d'obtenir l'ID sélectionné et la valeur au fichier .TS. Comme j'ai besoin de l'ID et de la valeur, je lie la valeur d'option directement à [valeur]. Mais si je fais cela, il est imprimé comme [objet d'objet].
<mat-form-field appearance="outline" class="w-100">
<mat-label>Enter Hotel Name</mat-label>
<input type="text" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="selectedclient($event)">
<mat-option *ngFor="let option of clients; let i = index" [value]="option">
{{ option.name }}
</mat-option>
</mat-autocomplete>
<mat-icon matSuffix>location_on</mat-icon>
</mat-form-field>
Fichier TS
options = [
{ id: 1, name: 'One'},
{ id: 2, name: 'Two'},
{ id: 3, name: 'Three'}
];
selectedclient(event) {
console.log(event.option.value);
}
URL de la rédaction de Stackblitz: https://stackblitz.com/edit/angular-mat-select-data-n4tvmj
Vous voulez utiliser le displayWith
attribut. Par manuel:
Si vous souhaitez que la valeur de contrôle de l'option (ce qui est enregistré dans le formulaire) soit différente de la valeur d'affichage de l'option (ce qui est affiché dans le champ de texte), vous devez définir la propriété
displayWith
sur votre auto-expert élément. Un cas d'utilisation commun pour cela pourrait être si vous souhaitez enregistrer vos données comme objet, mais affichez une seule des propriétés de chaîne de l'option.Pour faire ce travail, créez une fonction sur votre classe de composants qui mappe la valeur de contrôle à la valeur d'affichage souhaitée. Ensuite, liez-le à la propriété
displayWith
de l'autocomplete.
<mat-autocomplete ... [displayWith]="getOptionText">
getOptionText(option) {
return option.name;
}
démo: https://stackblitz.com/edit/angular-mat-select-data-cddqia