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 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

Python:获取目录下指定后缀的文件

os.walk()和os.listdir()两种方法,获取指定文件夹下的文件名. 获取当前目录下指定后缀的文件 #!/usr/bin/env python #c...

4869
来自专栏Rgc

scrapy回调函数传递参数

scrapy.Request 的callback传参的两种方式 1.使用 lambda方式传递参数 def parse(self, response): ...

2703
来自专栏深度学习之tensorflow实战篇

python文件打开方式详解——a、a+、r+、w+区别

第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写) **w+与r...

4647
来自专栏北京马哥教育

Linux Shell 通配符、元字符、转义符最全使用攻略

来自:程默 - 博客园,作者:程默 www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html 说到she...

5966
来自专栏vue学习

45、MongoDB—增、删、改、查

我们这里新建一个user集合(表),然后插入一条id为1,name为Ewall的数据行。

762
来自专栏JMCui

Git 中 .gitignore 的配置语法

    在日常的开发中,当我们需要将一个项目提交到 Git 时,并不是所有的文件都需要提交,比如一些自动生成的文件,类似于 .idea 文件、class 文件等...

1123
来自专栏蓝天

SHELL参数介绍

$0 = shell名称或shell脚本名称 $1 = 第一个shell参数 ... $9 = 第九个shell参数 $# = 位置参数的个数 "$*" = "...

734
来自专栏菩提树下的杨过

maven: 打包可运行的jar包(java application)及依赖项处理

IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: 1 <plugin> 2 <g...

2099
来自专栏自动化测试实战

flask第十八篇——模板【2】

2206
来自专栏LanceToBigData

linux(八)linux系统中查找文件二

前面介绍的是find命令,我们发现一个find命令居然有那么多的命令,我看到都要晕了,不管没有关系,加油。相信自己! 一、grep命令   1.1、作用   ...

1857

扫码关注云+社区