Given the example in the Angular docs you can see here and also repeated below, how can I access the rest of the object data in options
?
If for example, the object was more than just a simple list of names in key:value format, but something more complex such as data coming in from an API:
dataObject = {
name: 'someName',
nameID: 'someId',
foo: 'bar'
}
The example in the docs is too simple and isn't telling me how to get the name
to display in the input field, and to also get the corresponding nameId
in the ts file needed to return a PUT request via the API.
<form class="example-form">
<mat-form-field class="example-full-width">
<input type="text" placeholder="Assignee" aria-label="Assignee" matInput [formControl]="myControl" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option">
{{option.name}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
component.ts:
export class AutocompleteDisplayExample implements OnInit {
myControl = new FormControl();
options: User[] = [
{name: 'Mary'},
{name: 'Shelley'},
{name: 'Igor'}
];
filteredOptions: Observable<User[]>;
ngOnInit() {
this.filteredOptions = this.myControl.valueChanges
.pipe(
startWith<string | User>(''),
map(value => typeof value === 'string' ? value : value.name),
map(name => name ? this._filter(name) : this.options.slice())
);
}
displayFn(user?: User): string | undefined {
return user ? user.name : undefined;
}
private _filter(name: string): User[] {
const filterValue = name.toLowerCase();
return this.options.filter(option => option.name.toLowerCase().indexOf(filterValue) === 0);
}
}
I think you're looking for the onSelectionChange option:
You can simple add, to the mat-option:
(onSelectionChange)="setID(option.nameID)"
Everytime when you select a value this will be triggered.