我正在构建angular 6应用程序,其中需要使用<input>
文本框而不使用<select>
进行多选下拉列表。
HTML :
<form>
Select User: <input type="text" name="user" [value]="users"><br>
<button type="submit"> Submit </button>
</form>
Ts :
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
users = ['First User', 'Second User', 'Third User', 'Fourth User'];
}
我还需要使用纯Javascript,Tpescript 和没有第三方或jquery 。
还建议不使用html 数据列表。
我进行了很多搜索,但找不到合适的解决方案。 请帮助我达到目标。
Stackblitz :https://stackblitz.com/edit/angular-v7kmbq
答案 0 :(得分:2)
检查此StackBlitz:Dropdown Example
HTML文件:
<button type="button" (click)="clear()">Clear</button>
<div class="autocomplete">
<input name="suggestion" type="text" placeholder="User" (click)="suggest()" [formControl]="typeahead">
<div class="autocomplete-items" *ngIf="show">
<div *ngFor="let s of suggestions" (click)="selectSuggestion(s)">{{ s }}</div>
</div>
</div>
TS文件:
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
suggestions: string [] = [];
suggestion: string;
show: boolean = false;
typeahead: FormControl = new FormControl();
fieldHistory: string [] = [];
suggest() {
this.suggestions = this.users;
this.show = true;
}
selectSuggestion(s) {
this.suggestion = "";
var index = this.fieldHistory.findIndex(function(element) {
return element === s;
});
if (index === -1) {
this.fieldHistory.push(s);
} else {
var firstPart = this.fieldHistory.slice(0, index);
var secondPart = this.fieldHistory.slice(++index);
this.fieldHistory = firstPart.concat(secondPart);
}
for (let i = 0; i < this.fieldHistory.length; i++)
this.suggestion = this.suggestion + " " + this.fieldHistory[i];
this.typeahead.patchValue(this.suggestion);
this.show = false;
}
clear() {
this.suggestion = "";
this.fieldHistory.pop();
for (let item of this.fieldHistory)
this.suggestion = this.suggestion + " " + item;
this.typeahead.patchValue(this.suggestion);
}
users = ['First User', 'Second User', 'Third User', 'Fourth User'];
}
CSS文件:
.autocomplete {
position: relative;
width: 100%;
}
.autocomplete-items {
position: absolute;
border: 1px solid #d4d4d4;
border-radius: 4px;
margin-top: 15px;
top: 100%;
left: 0;
right: 0;
}
.autocomplete-items div {
padding: 10px;
cursor: pointer;
background-color: #fff;
border-bottom: 1px solid #d4d4d4;
}
.autocomplete-items div:hover {
background-color: #e9e9e9;
}
也导入模块:import { ReactiveFormsModule } from '@angular/forms';
答案 1 :(得分:1)
这是工作代码,我用[[ngModel)]代替了formcontrols:
https://stackblitz.com/edit/angular-qjrhs5?file=src%2Fapp%2Fapp.component.css