angular使用管道实现搜索功能

之前在没学精angular的时候,想实现搜索功能的时候,总是想着从数据库里获取搜索的结果,可殊不知,原来在angular中只需要简单的几行代码就实现了最常用的搜索功能.

下面就来说说如何实现:

1.

export class person{
  constructor(
    public name:string,
    public age:number
  ){

  }
}
persons:Array<any>=[
    new person('tom',20),
    new person('lilei',22),
    new person('lilei',23),
    new person('lilei',24),
    new person('lilei',25),
    new person('lilei',26),
    new person('lilei',23),
    new person('lilei',24),
    new person('lilei',25),
    new person('lilei',26),
    new person('lilei',22),
    new person('lilei',21),
    new person('lilei',29)
  ]

定义数组,根据age 来显示结果

2.显示到页面上:

<input type="text" [formControl]='agefilter'>
<ul>
  <li *ngFor="let person of persons | filter:'age':keyword">
    name:{{person.name}}  <br>
    age:{{person.age}}
  </li>
</ul>

formControl 是表单中的一个指令, 当input表单内容改变的时候,agefilter就会发射改变后的内容

3.获得内容之后 在组件中订阅改变后的内容

private agefilter:FormControl=new FormControl() 

constructor() { 
    this.agefilter.valueChanges.debounceTime(500).subscribe((value)=>{
      this.keyword=value
    })
  }

需要在头部引入

import { FormControl } from '@angular/forms';
import 'rxjs/Rx';

debounceTime()这个函数可以提高用户的体验.

另外还需要在app.module中引入ReactiveFormsModule.

4.接下来写管道了.

使用ng指令 ng g pipe pipe/searchPipe

代码如下

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {
  
  transform(list: any[], filterField:string,keyword:string): any {
    if(!filterField || ! keyword){
      return list
    }


    
    return list.filter((item)=>{
      // console.log(item)
      let val= item[filterField]
      console.log(val);
      return val >=keyword
    });
  }

}

这个过滤需要两个参数,第一个参数:是依据哪个参数来搜索,是age还是name,

第二个参数是Input的内容.

if(!filterField || ! keyword){       return list     }

如果两个参数有一个为空的话,返回list.

return list.filter((item)=>{       // console.log(item)       let val= item[filterField]       console.log(val);       return val >=keyword     });

页面只需要返回false或者true来控制是否显示,false为不过滤了 是显示,相反则显示

之后在页面中应用即可.

5.在页面中即可

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2060
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4878
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2536
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4848
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31710
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4617
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645

扫码关注云+社区