antocomplete 实现省市联动以及输入本文
其实本身联动下拉框是个很简单的活,但是业务提了个要求,就是要允许输入下拉框选项里没有的内容,不接受反驳。
1,新建省市通用组件 AutocompleteProviceCityComponent
<input placeholder="" [(ngModel)]="defaultValue" nz-input (focus)="onInput($event)" (input)="onInput($event)" (ngModelChange)="onValueChange()" [nzAutocomplete]="sourceAuto" />
<nz-autocomplete [compareWith]="compareWith" nzBackfill #sourceAuto>
<nz-auto-option *ngFor="let option of options" [nzValue]="option.value" [nzLabel]="option.key">
{{ option.key }}
</nz-auto-option>
</nz-autocomplete>
export class AutocompleteProviceCityComponent implements OnInit {
@Input('sourceList') sourceList: any[];//省或市的集合
options: any[] = [];
@Input('defaultValue') defaultValue :string;//文本值
@Output() changeValueEvent=new EventEmitter<string>();
constructor() { }
ngOnInit(): void {
}
onInput(e: Event): void {
const value = (e.target as HTMLInputElement).value;
this.options = this.sourceList.filter(s => s.key.indexOf(value) > -1);
}
onValueChange(){
this.changeValueEvent.emit(this.defaultValue);
}
compareWith = (o1: any | string, o2: any): boolean => {
if (o1) {
return o2.indexOf(o1) > -1;
} else {
return false;
}
};
}
2,外层操作逻辑
<app-autocomplete-provice-city (changeValueEvent)="getProvince($event)" [defaultValue]="province" [sourceList]="listOfProvice"></app-autocomplete-provice-city>
<app-autocomplete-provice-city (changeValueEvent)="getCity($event)" [defaultValue]="city" [sourceList]="listOfCity"></app-autocomplete-provice-city>
getProvince(province: any) {
this.queryCities(province);
}
getCity(city: any) {
this.confirmBank.city = city;
}
queryCities(province: string) {
if (!province) return;
this.province = province;
this.city = '';
this.service.getCityList(province).subscribe((ret) => {
if (ret) {
this.listOfCity = ret;
this.listOfCity.forEach(element => {
element.key = element.key.substring(element.key.lastIndexOf('_') + 1, element.key.length)
});
}
});
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现