美文网首页angular
angular中使用pipe管道过滤结果集

angular中使用pipe管道过滤结果集

作者: 窗外的雪儿飞 | 来源:发表于2019-09-26 23:39 被阅读0次

1. 引子

假设我们需要一个过滤管道来负责过滤应用程序中的列表。

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

@Pipe({ 
  name: ‘filter’
})
export class FilterPipe implements PipeTransform {
  transform(arr: string[], searchValue: string) { 
    if (!searchValue) return arr;

    return arr.filter(value => { 
      return value.toLowerCase().indexOf(searchValue.toLowerCase()) > -1; 
    }); 
  }
}

这里我们创建来一个数组,通过indexOf方法过滤数组中的元素,最终得到我们想要的列表。
使用方式如下:

import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';

@Component({ 
  selector: ‘my-app’,
   template: `
     <input [formControl]="search">
     
     <div *ngFor=”let item of (items | filter:search.value)”>
       {{item}} 
     </div>
 `
})
export class AppComponent { 
  search = new FormControl(); 
  items = [‘One’, ‘Two’, ‘Three’, ‘Four’];
}

2. 问题

以上很完美解决了列表过滤的需求,但是这个时候产品想向用户展示检索结果集的数量。大多数时候,我们可能会想,不就是一个数组长度的事儿,有什么难的,然后codeing如下:

<div *ngFor=”let item of (items | filter:search.value)”>
  {{item}}
</div>
<p>Count: <b>{{(items | filter:search.value).length}}</b></p>

但是,真不要这么干!你会发现我们写的管道会运行两次。angular4之后这个问题有了解决方案,那就是: as。借助as关键字将管道结果分配给局部变量,还等什么,升级改进我们的代码如下:

<div *ngFor=”let item of (items | filter:search.value) as result”>
  {{item}} 
 </div>
{{result.length}}

这个时候你会发现控制台报错了...

Cannot read property ‘length’ of undefined

这不是玩我吗?有局部变量啊,为啥还会报错,解决方案是: ngIf

最终的code如下:

<ng-container *ngIf=”(items | filter:search.value) as result”>

  <div *ngFor=”let item of result”>
    {{item}}
  </div>

  <p>Count: <b>{{result.length}}</b></p>
  
</ng-container>

相关文章

  • angular中使用pipe管道过滤结果集

    1. 引子 假设我们需要一个过滤管道来负责过滤应用程序中的列表。 这里我们创建来一个数组,通过indexOf方法过...

  • angular pipe 自定义管道

    可以理解为angular中的管道(pipe)与angular1.x的过滤器(filter)一样。 那么我们就来自定...

  • 管道Angular 4 - Pipes

    在本章中,我们将讨论Angular 4中的管道。管道早先在Angular1中称为过滤器,在Angular 2和4中...

  • 使用 Angular 管道

    在 Angular 框架中,我们可以使用 管道技术,对视图模板中表达式的计算结果,进行过滤和转换操作,然后对最终的...

  • Android进程间通信机制-管道

    PIPE和FIFO的使用及原理 PIPE和FIFO都是指管道,只是PIPE独指匿名管道,FIFO独指有名管道,我们...

  • Linux 进程之间的通信方式

    linux使用的进程间通信方式 管道(pipe)、流管道(s_pipe)、无名管道(FIFO)、 套接字 sock...

  • Angular 单元测试实践 (4)

    本文继续介绍如何对 Angular 的管道(pipe)、指令(directive)和表单(form)进行单元测试。...

  • angular基础知识(一)

    @Pipe 注册一个管道 管道类似于angularjs的过滤器 @Component 注册一个组件 for循环 属...

  • laravel集合函数-pipe()

    pipe() 管道函数,传递集合到回调函数中处理,返回处理结果

  • Angular 关于pipe

    Angular 中的管道其实就是angularjs中的过滤器,用来转换数据然后显示给用户。要创建一个管道,必须实现...

网友评论

    本文标题:angular中使用pipe管道过滤结果集

    本文链接:https://www.haomeiwen.com/subject/nmqouctx.html