好的 首先,永远不要使用 Pipes 来过滤或排序您拥有的任何数组或其他对象。如果您来自巴西,请观看此课程:
https://www.youtube.com/watch?v=h1t_O_w0LOc&list=PLGxZ4Rq3BOBoSRcKWEdQACbUCNWLczg2G&index=49
这个女孩解释了为什么你永远不应该用管道过滤或订购任何东西。
好的,现在让我们使用自动完成创建正确的输入,同时过滤用户输入值。
在此示例中,用户将搜索我们的书籍数组中的一本书。
这是组件:
import { Component, OnInit } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { Observable } from 'rxjs/Rx';
@Component({
selector: 'app-filter-examples',
templateUrl: './filter-examples.component.html',
styleUrls: ['./filter-examples.component.css']
})
export class FilterExamplesComponent implements OnInit {
books: string[] = ['Angular JS', 'Angular 2', 'JavaScript', 'HTML 5 and CSS 3',
'Java 1', 'Java 2', 'Java 3', 'php', 'Typescript', 'C', 'c++',
'C#'];
filtro: string = '';
getBooks() {
// if the input is empty search result will show 0 books.
//This is just to not show all books before user do any search
if (this.filtro === '') {
return null;
}
if (this.books.length === 0 || this.filtro === undefined) {
return this.books;
}
// Here where we will do the search. First of all filtro(filter in portuguese)
// will be compare to all elements in our books (all of then in lower case)
// and will return all the elements that match with the variable filtro
return this.books.filter((v) => {
if (v.toLowerCase().indexOf(this.filtro.toLowerCase()) >= 0) {
return true;
}
return false;
});
}
}
现在这是我们的 html 文件:
<html>
<body>
Search some Book <br>
<input list="testAutocomplete" [(ngModel)]="filtro" >
<datalist id="testAutocomplete">
<option *ngFor="let book of books">
{{ book }}
</option>
</datalist>
<h1> Search Result </h1>
<ul>
<li *ngFor="let book of getBooks()">
{{ book }}
</li>
</ul>
</body>
</html>
在 Angular 2 中使用自动完成功能进行简单搜索的最佳方法是使用 datalist 标签和 ngFor 来列出选项。这真的很简单。并且不要忘记将 ngModel 作为输入属性,以便在我们的组件方法中使用此值。
OBS:getBooks 方法只是将结果以动态列表的形式显示给用户。