Onn*_*naB 0 autocomplete typescript angular-material angular
我正在为我的项目使用自动完成材料,但我不明白如何使用 [displayWith]。我尝试了一些示例,但不在 html 中显示名称,仅显示 id。
我的html代码:
<form [formGroup]="editClientForm">
<input formControlName="city_id" id="city_id" matInput placeholder="Select City*" aria-label="State" [matAutocomplete]="auto1"
autoActiveFirstOption [formControl]="city">
<mat-autocomplete #auto1="matAutocomplete" [displayWith]="displayFnCity">
<mat-option (onSelectionChange)="updateForm($event, city.city_id, 'city_id')" *ngFor="let city of filteredOptionsCity | async"
[value]="city.name">
{{ city.name }}
</mat-option>
</mat-autocomplete>
</form>
Run Code Online (Sandbox Code Playgroud)
我的 ts 组件:
cityid = 0;
filteredOptionsCity: any;
city: FormControl = new FormControl();
editClientForm: FormGroup;
this.editClientForm = this.fb.group({
'city_id': new FormControl('', Validators.required),
});
ngOnInit() {
this.filteredOptionsCity = this.city.valueChanges.pipe(
startWith(''),
map(value => this.filterCity(value))
);
}
populateForm() {
this.activatedRoute.params.subscribe(
params => {
this.clientService.getClientById(params['id']).subscribe(
client => {
this.client = client;
console.log(client)
this.editClientForm.controls['city_id'].setValue(client.city);
console.log(client.city);
}
);
}
);
}
// City
filterCity(val: string): City[] {
if (val) {
let filterValue = val.toLowerCase();
console.log(this.cityes)
return this.cityes.filter(city => city.name.toLowerCase().startsWith(filterValue));
}
return this.cityes;
}
updateForm(ev: any, idd: any, componentid: any) {
if (ev.isUserInput) {
if (componentid === 'city_id') {
this.cityid = idd;
this.editClientForm['controls']['city_id'].setValue(ev.source.value);
} else {
console.log('test');
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的班级客户:
export class Client {
city: City[];}
Run Code Online (Sandbox Code Playgroud)
我的班级城市:
export class City {
city_id: string;
name: string; }
Run Code Online (Sandbox Code Playgroud)
在 html 中显示 ccity_id,我想要城市名称。
我尝试使用这段代码,但没有发生任何事情:
getName(productid: string) {
const [filteredProdG] = this.cityes.filter(pt => pt.city_id === productid);
if (typeof filteredProdG !== 'undefined' && productid === filteredProdG.city_id) {
return filteredProdG.name;
}
}
1. displayFnCity(city?: City): string {
console.log(city ? city.name : undefined) //show undefined
return city ? city.name : undefined;
}
2. displayFnCity(city) {
console.log(city.name) //show undefined
return city.name;
}
Run Code Online (Sandbox Code Playgroud)
3.如果我尝试[displayWith]="displayFn"或[displayWith]="displayFnCity" 仅在html中显示id_city
请问您知道如何解决这个问题吗?
该[displayWith]函数将传递该[value]对象。因为在您的情况下您使用了[value]="city.name"您不需要使用[displayWith],因为默认情况下自动完成将显示任何[value]内容。通常,人们会使用[displayWith]when[value]绑定到人类无法识别的字符串的对象。例如,如果您使用了[value]="city",那么您也想使用[displayWith]="displayFnCity"(your #1)。
| 归档时间: |
|
| 查看次数: |
5685 次 |
| 最近记录: |