Angular 6:如何在垫子自动完成下拉列表中访问所有选项值?



鉴于您可以在此处看到的 Angular 文档中的示例,并在下面重复,我如何在options中访问其余的对象数据?

例如,如果对象不仅仅是键:值格式的简单名称列表,而是更复杂的东西,例如来自 API 的数据:

dataObject = {
name: 'someName',
nameID: 'someId',
foo: 'bar'
}

文档中的示例太简单了,并没有告诉我如何在输入字段中显示name,以及如何在 ts 文件中获取通过 API 返回 PUT 请求所需的相应nameId

<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> 

组件.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);
}
}

我想你正在寻找onSelectionChange选项:

您可以简单地将 mat 选项添加到:

(onSelectionChange)="setID(option.nameID)"

每次选择值时,都会触发此值。

最新更新