在 Angular 中过滤数组
filter()
方法允许你将函数应用于数组的每个元素,然后返回一个新数组,该数组仅包含函数返回 true 的那些元素。
你可以使用 filter()
方法通过属性值过滤出数组中的元素。本文将讨论 Angular 2 中过滤的完整细节。
Angular 2 是一个基于 TypeScript 的 MVW 框架,具有模型-视图-任意架构。它是对 Angular 1 的完全重写,并利用了最新的 Web 技术。
在 Angular 2 中,数组由类型 Array
表示。例如,可以如下声明一个字符串数组。
var myArray = new Array();
myArray.push("John");
myArray.push("Mary");
myArray.push("Anna");
// myArray contains "John", "Mary" and "Anna"
Angular 2 过滤数组与 Angular 1 过滤数组
Angular 2 过滤器是一个模板过滤器,它接受输入并返回转换后的输入。Angular 2 引入了管道
的概念,它提供了一种更改数据的方式。
管道是使用 pipe
创建的。pipe()
方法创建一个新的 pipe
并将其注册到当前 scope
的名称下。
而 Angular 1 有内置的过滤器。这些过滤器可应用于表达式以对表达式的结果执行特定操作。
filter()
方法用于创建过滤器,apply()
方法用于将过滤器应用于表达式。
Angular 2 过滤器和 Angular 1 过滤器之间的区别在于,你可以在 Angular 2 中使用管道将多个过滤器链接在一起。相反,你需要使用括号来链接 Angular 1 中的多个过滤器。
现在让我们一步一步地在 Angular 2 中创建一个过滤器。在 Angular 2 中,我们做的第一件事就是构造一个新的 Pipe
。下面是它的外观。
import { Pipe } from '@angular/core';
@Pipe({
name: 'AgePipe'
})
export class AgePipe {}
使用 ngOnInit()
在 Angular 2 中过滤数组
Angular 过滤器中使用的主要内容是 ngOnInit()
。Angular 2 有生命周期钩子,我们可以使用它来控制数据绑定的更新方式和时间。
ngOnInit()
在第一个 ngOnChanges()
之后和 ngDoCheck()
之前立即调用。
ngOnInit
是生命周期钩子之一。当组件完全初始化时,Angular 会调用 ngOnInit()
信号。
我们必须从 @angular/core
导入 OnInit
才能使用 ngOnInit()
(实际上,这不是必需的,但作为一种好的做法,导入 OnInit
)。要了解有关 ngOnInit
的更多信息,请单击此处。
当你使用 angular-CLI
创建新组件时,ngOnInit
会自动插入。我们将在示例中实现 ngOnInt()
。
ngOnInit() {
this.setData();
}
setData() {
this.dataObject = HelloData;
}
完整的 Typescript 代码如下所示。
import { Component, OnInit } from '@angular/core';
import { Pipe } from '@angular/core';
@Pipe({
name: 'AgePipe'
})
export class AgePipe { }
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
dataObject = [];
filter = { RegCategoryName: '' }
constructor() { }
ngOnInit() {
this.setData();
}
setData() {
this.dataObject = HelloData;
}
filterIt($event) {
this.filter.RegCategoryName = $event.target.value;
this.dataObject = HelloData.filter(value => {
const data = { ...value };
data.List = data.List.map(ch => {
const list = { ...ch };
list.RegistrationCategory = list.RegistrationCategory.filter(gChild => {
return gChild.RegCategoryName.toLowerCase().indexOf(this.filter.RegCategoryName.toLowerCase()) !== -1
});
return list;
});
return data.List.some(list => !!list.RegistrationCategory.length);
});
}
}
const HelloData = [
{
"BookId": 1,
"Book": {
"BookId": 1,
"BookName": "When Life Begins",
},
"List": [
{
"RegistrationCategory": [
{
"RegistrationCategoryId": 203,
"RegCategoryName": "Abu Yahya"
}
],
"viewMore": false
}
]
},
{
"BookId": 2,
"Book": {
"BookId": 2,
"BookName": "British History",
},
"List": [
{
"RegistrationCategory": [
{
"RegistrationCategoryId": 204,
"RegCategoryName": "Usman"
}
],
"viewMore": false
}
]
},
{
"BookId": 3,
"Book": {
"BookId": 3,
"BookName": "Holidays",
},
"List": [
{
"BookId": 3,
"RegistrationCategory": [
{
"RegistrationCategoryId": 205,
"RegCategoryName": "Egon Homtic"
}
],
"viewMore": false
}
]
},
{
"BookId": 4,
"Book": {
"BookId": 4,
"BookName": "Destination",
"ShortCode": "ABC04",
},
"List": [
{
"RegistrationCategory": [
{
"RegistrationCategoryId": 205,
"RegCategoryName": "Steve Jobs"
}
],
"viewMore": false
},
]
}
]
之后,我们将开始处理 HTML 代码,我们主要关心的是正确处理 ng-For
。
ng-For
指令用于遍历值列表并显示列表中的每个项目。它可以用作 ng-repeat
的替代品。
ng-repeat
指令通常在数据集包含许多项目时更合适,并且我们希望将它们全部显示在页面上。但是在这里,我们使用搜索过滤器来根据搜索命令显示结果;这就是为什么 ng-For
比 ng-repeat
更有用的原因。
<tr *ngFor="let data of dataObject">
<td>{{data.Book.BookName}}</td>
<td>
<div *ngFor="let cat of data.List">
<div *ngFor="let child of cat.RegistrationCategory">
完整的 HTML 代码如下所示。
Search by Id : <input type="text" (keyup)="filterIt($event)">
<table>
<tr>
<th>Books</th>
<th>Book Author (ID) Write Author name in the above search bar and see the magic of Angular 2 Filter</th>
</tr>
<tr *ngFor="let data of dataObject">
<td>{{data.Book.BookName}}</td>
<td>
<div *ngFor="let cat of data.List">
<div *ngFor="let child of cat.RegistrationCategory">
{{child.RegCategoryName}}
</div>
</div>
</td>
</tr>
</table>
相关文章
在 Angular 中上传文件
发布时间:2023/04/14 浏览次数:71 分类:Angular
-
本教程演示了如何在 Angular 中上传任何文件。我们还将介绍如何在文件上传时显示进度条,并在上传完成时显示文件上传完成消息。
Angular 中所有 Mat 图标的列表
发布时间:2023/04/14 浏览次数:91 分类:Angular
-
本教程演示了在哪里可以找到 Angular 中所有 Mat 图标的列表以及如何使用它们。
Angular 2 中的复选框双向数据绑定
发布时间:2023/04/14 浏览次数:139 分类:Angular
-
本教程演示了如何一键标记两个复选框。这篇有 Angular 的文章将着眼于执行复选框双向数据绑定的不同方法。
在 AngularJS 中重新加载页面
发布时间:2023/04/14 浏览次数:142 分类:Angular
-
我们可以借助 windows.location.reload 和 reload 方法在 AngularJS 中重新加载页面。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 AngularJS 中启用 HTML5 模式
发布时间:2023/04/14 浏览次数:150 分类:Angular
-
本文讨论如何在 AngularJS 应用程序上启用带有深度链接的 HTML5 模式。
在 AngularJs 中加载 spinner
发布时间:2023/04/14 浏览次数:107 分类:Angular
-
我们将介绍如何在请求加载时添加加载 spinner,并在 AngularJs 中加载数据时停止加载器。
在 Angular 中显示和隐藏
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程演示了 Angular 中的显示和隐藏。在开发商业应用程序时,我们需要根据用户角色或条件隐藏一些数据。我们必须根据该应用程序中的条件显示相同的数据。
在 Angular 中下载文件
发布时间:2023/04/14 浏览次数:104 分类:Angular
-
本教程演示了如何在 angular 中下载文件。我们将介绍如何通过单击按钮在 Angular 中下载文件并显示一个示例。