显然,Angular 2将使用管道而不是Angular1中的过滤器以及ng-for来过滤结果,尽管实现似乎仍然模糊,没有明确的文档.
也就是说,我想要实现的目标可以从以下角度来看待
如何使用管道实现?
基本上,你编写一个管道然后可以在*ngFor
指令中使用.
在您的组件中:
filterargs = {title: 'hello'};
items = [{title: 'hello world'}, {title: 'hello kitty'}, {title: 'foo bar'}];
在模板中,您可以将字符串,数字或对象传递给管道以用于过滤:
在你的管道中:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'myfilter',
pure: false
})
export class MyFilterPipe implements PipeTransform {
transform(items: any[], filter: Object): any {
if (!items || !filter) {
return items;
}
// filter items array, items which match and return true will be
// kept, false will be filtered out
return items.filter(item => item.title.indexOf(filter.title) !== -1);
}
}
记得注册你的管道app.module.ts
; 你不再需要在你的管道中注册管道了@Component
import { MyFilterPipe } from './shared/pipes/my-filter.pipe';
@NgModule({
imports: [
..
],
declarations: [
MyFilterPipe,
],
providers: [
..
],
bootstrap: [AppComponent]
})
export class AppModule { }
这是一个Plunker,它演示了使用自定义过滤器管道和内置切片管道来限制结果.
请注意(正如几位评论员指出的那样)Angular中没有内置过滤管道的原因.
很多人都有很好的方法,但这里的目标是通用并定义一个数组管道,它在与*ngFor的关系中可以非常重复使用.
callback.pipe.ts(不要忘记将它添加到模块的声明数组中)
import { PipeTransform, Pipe } from '@angular/core'; @Pipe({ name: 'callback', pure: false }) export class CallbackPipe implements PipeTransform { transform(items: any[], callback: (item: any) => boolean): any { if (!items || !callback) { return items; } return items.filter(item => callback(item)); } }
然后在你的组件中,你需要实现一个具有以下signuature的方法(item:any)=> boolean,在我的例子中,我称之为filterUser,它过滤用户的年龄大于18岁.
你的组件
@Component({ .... }) export class UsersComponent { filterUser(user: IUser) { return !user.age >= 18 } }
最后但并非最不重要的是,您的HTML代码将如下所示:
你的HTML
正如您所看到的,此管道在所有数组中都非常通用,例如需要通过回调过滤的项目.在我的案例中,我发现它对*ngFor类似场景非常有用.
希望这可以帮助!!!
codematrix
简化方式(由于性能问题仅在小型阵列上使用.在大型阵列中,您必须通过代码手动生成过滤器):
请参阅:https://angular.io/docs/ts/latest/guide/pipes.html#!#no-filter-pipe
@Pipe({ name: 'filter' }) @Injectable() export class FilterPipe implements PipeTransform { transform(items: any[], field : string, value : string): any[] { if (!items) return []; if (!value || value.length == 0) return items; return items.filter(it => it[field].toLowerCase().indexOf(value.toLowerCase()) !=-1); } }
用法:
如果使用变量作为第二个参数,请不要使用引号.
这是我在不使用管道的情况下实现的.
component.htmlcomponent.ts@Component({ .... }) export class YourComponent { filter(itemList: yourItemType[]): yourItemType[] { let result: yourItemType[] = []; //your filter logic here ... ... return result; } }
我认为这将是计算密集型的,因为Angular每次运行变化检测时都会执行过滤器.它不能很好地扩展到大型阵列.一个更干净但代码更复杂的解决方案是使`itemList`成为一个Observable并使用异步过滤器:`let item of itemsList | async`.发生更改时,使observable发出新列表.这样,过滤代码仅在需要时运行.
5> SpaceBeers..:我不确定它什么时候进来,但是他们已经制作了切片管来做到这一点.它也有很好的记录.
https://angular.io/docs/ts/latest/api/common/index/SlicePipe-pipe.html
{{ feature.description }}
如果使用[trackBy接口](https://angular.io/docs/ts/latest/api/core/index/TrackByFn-interface.html),切片管道必须在`;`之前应用.例如:`*ngFor ="让内容的特征?.keyFeatures |切片:1:5; trackBy特征?.id"`
6> Jeroen..:您还可以使用以下内容:
如果您的商品符合条件,则仅显示div
有关详细信息,请参阅角度文档.如果还需要索引,请使用以下命令:
7> Ben Glasser..:Angular2中的管道与命令行上的管道类似.每个先前值的输出都被送入管道之后的过滤器,这样就可以很容易地链接过滤器,如下所示:
{item | filter1 | filter2}
不支持同一元素上的`*ngFor`和`*ngIf`.你需要改变其中一个``的显式形式推荐阅读
如何解决《GulpBrowserify中的标准错误日志》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Angular$http-spring-抛出异常但http状态为200》经验,为你挑选了1个好方法。 ... [详细] 如何解决《更新到新Chrome版本后,在Chrome中获取PolymerError》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Haskell:找不到模块`Data.List.Split'》经验,为你挑选了2个好方法。 ... [详细] 如何解决《使用预训练(Tensorflow)CNN提取特征》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何从Task返回结果?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《从URL中删除锚标记》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在关闭Go中的应用程序之前是否需要关闭数据库连接?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《我在ubuntu中使用sleep函数,但printf函数在while循环中运行得非常慢.为什么?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《缺少权利文件》经验,为你挑选了2个好方法。 ... [详细] 如何解决《Hadoop中的map,shuffle,merge和减少时间的精确定义》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在android上使用离线包来反应原生项目?》经验,为你挑选了3个好方法。 ... [详细] 如何解决《在Windows10上运行dotnet3.5应用程序》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用熊猫和scipy的树状图》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在java中与弹性城堡的标志文件》经验,为你挑选了1个好方法。 ... [详细] 如何解决《float或double值如何存储在C中的变量中?》经验,为你挑选了2个好方法。 ... [详细] 如何解决《将数据注入Phoenix的Actionparams》经验,为你挑选了1个好方法。 ... [详细] 如何解决《日期时间无效》经验,为你挑选了1个好方法。 ... [详细] 吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1如何使多次启动的NSTimer无效
- 2类库中的控制台应用程序参考
- 3选择兄弟的文本
- 4Spring Security:如何将重定向查询参数添加到登录URL以允许页面加书签?
- 5GStreamer - 从Raspberry到VLC-PC的网络摄像头流
- 6c ++支持模板元编程中的最后一次调用优化
- 7一个ACE编辑器的瘦包装器,用于制作React组件
- 8用PyBrain神经网络预测时间序列数据
- 9CSS覆盖规则
- 10using语句外的SQL Connection构造函数
- 11在MATLAB中反表制函数
- 12MQTT:每分钟MQTT客户端轮询服务器多少次?
- 13如何在Angular 2中将对象从一个组件传递到另一个组件?
- 14如何在Xamarin.Android上处理三倍(或配置的数字)轻击手势?
- 15从控制器触发模态弹出窗口
- 16表之间的多对多关系 - 如何在SQL中建模
- 17升级到php-7后"调用未定义的函数mysql_connect()"
- 18将现有Watchkit应用程序更新为WatchOS2
- 19SQL Server外键,引用表
- 20Android:布局动画,如Inshorts新闻应用
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有