如何转换为可编辑的 select 框?
how to convert to an editable select box?
我有一个 angular 5 项目 bootstrap。在我的组件之一 html 中,我有一个 select 框。当我点击它时,会显示一个下拉项目列表,我可以选择一个。但是我希望用户键入一些字符串,以便可以缩小下拉项的范围。这是我当前的代码片段,不知道如何将 select 框转换为可编辑框。
<select formControlName="contactList" [compareWith]="compareResource">
<option value="" disabled>{{ 'PLACEHOLDERS.CONTACT_LIST' | translate }}</option>
<option *ngFor="let contactList of contactLists" [ngValue]="contactList">{{ contactList.name }}</option>
</select>
我想将现有的 select 框代码转换为可编辑的 select 框。请分享您对此的看法。我对 UI 编程非常陌生。谢谢
您可以使用Angular Material 自动完成过滤器来达到您想要的结果。 - https://material.angular.io/components/autocomplete/overview#adding-a-custom-filter
这可以通过使用 ng-select
来实现
安装 ng-select
npm install --save @ng-select/ng-select
app.module.ts
导入模块
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { NgSelectModule } from '@ng-select/ng-select';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
FormsModule,
CommonModule,
NgSelectModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
style.css
导入 ng-select 默认样式
@import "~@ng-select/ng-select/themes/default.theme.css";
app.component.html
通过将 nameList 绑定为下拉列表和搜索功能的项目数组来创建 ng-select 下拉列表
<div style="text-align:center">
Editable Dropdown
</div>
<div style="width:300px; height:200px">
<ng-select class="autocomplete" dropdownPosition="bottom" [searchFn]="searchName" [items]="nameList"
[(ngModel)]="selectedName" [dropdownPosition]="'auto'">
<ng-template ng-header-tmp>
<div class="container-fluid">
<div class="row">
<div class="col-md-6">Username</div>
</div>
</div>
</ng-template>
<ng-template ng-label-tmp let-item="item">
<span>{{item}}</span>
</ng-template>
<ng-template ng-option-tmp let-item="item" let-index="index">
<div class="container-fluid">
<div class="row">
<div class="col-md-4">{{item}}</div>
</div>
</div>
</ng-template>
</ng-select>
</div>
app.component.ts
初始化nameList并定义搜索函数。在这里,我将 return 包含从下拉列表中输入的值的名称
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
selectedName: string;
nameList: string[];
constructor() { }
ngOnInit() {
this.nameList = this.getNameList();
}
getNameList(): string[] {
return [
'Adam',
'Alex',
'Bob',
'Bennt',
'Cathrina',
'Dug',
'Suzzy',
'Amy',
'Milan'
];
}
searchName(filter: string, item: string) {
filter = filter.toLocaleLowerCase();
return (item.toLocaleLowerCase().indexOf(filter) > -1);
}
}
我有一个 angular 5 项目 bootstrap。在我的组件之一 html 中,我有一个 select 框。当我点击它时,会显示一个下拉项目列表,我可以选择一个。但是我希望用户键入一些字符串,以便可以缩小下拉项的范围。这是我当前的代码片段,不知道如何将 select 框转换为可编辑框。
<select formControlName="contactList" [compareWith]="compareResource">
<option value="" disabled>{{ 'PLACEHOLDERS.CONTACT_LIST' | translate }}</option>
<option *ngFor="let contactList of contactLists" [ngValue]="contactList">{{ contactList.name }}</option>
</select>
我想将现有的 select 框代码转换为可编辑的 select 框。请分享您对此的看法。我对 UI 编程非常陌生。谢谢
您可以使用Angular Material 自动完成过滤器来达到您想要的结果。 - https://material.angular.io/components/autocomplete/overview#adding-a-custom-filter
这可以通过使用 ng-select
来实现安装 ng-select
npm install --save @ng-select/ng-select
app.module.ts
导入模块
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { NgSelectModule } from '@ng-select/ng-select';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
FormsModule,
CommonModule,
NgSelectModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
style.css
导入 ng-select 默认样式
@import "~@ng-select/ng-select/themes/default.theme.css";
app.component.html
通过将 nameList 绑定为下拉列表和搜索功能的项目数组来创建 ng-select 下拉列表
<div style="text-align:center">
Editable Dropdown
</div>
<div style="width:300px; height:200px">
<ng-select class="autocomplete" dropdownPosition="bottom" [searchFn]="searchName" [items]="nameList"
[(ngModel)]="selectedName" [dropdownPosition]="'auto'">
<ng-template ng-header-tmp>
<div class="container-fluid">
<div class="row">
<div class="col-md-6">Username</div>
</div>
</div>
</ng-template>
<ng-template ng-label-tmp let-item="item">
<span>{{item}}</span>
</ng-template>
<ng-template ng-option-tmp let-item="item" let-index="index">
<div class="container-fluid">
<div class="row">
<div class="col-md-4">{{item}}</div>
</div>
</div>
</ng-template>
</ng-select>
</div>
app.component.ts
初始化nameList并定义搜索函数。在这里,我将 return 包含从下拉列表中输入的值的名称
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
selectedName: string;
nameList: string[];
constructor() { }
ngOnInit() {
this.nameList = this.getNameList();
}
getNameList(): string[] {
return [
'Adam',
'Alex',
'Bob',
'Bennt',
'Cathrina',
'Dug',
'Suzzy',
'Amy',
'Milan'
];
}
searchName(filter: string, item: string) {
filter = filter.toLocaleLowerCase();
return (item.toLocaleLowerCase().indexOf(filter) > -1);
}
}