angularJs饱受广大开发者欢迎,除了其依赖注入,双向绑定的思想,directive指令,filter过滤器也极大的提高了开发效率,代码更加优雅,维护起来也更加方便。比如,上传,打印,排序,流程等只需一个指令,并绑定相应的变量即可实现,根本不需要后台同事编写JS,好的指令,不仅可复用,可拓展,还得可以维护。指令用的蛮多了,就不赘述,今天谈谈它的好基友,filter过滤器。angularJS的过滤器非常强大,一个filter能瞬间format时间的格式,货币,数字,以及自定义过滤器对目标数组进行过滤。

过滤器使用起来也很简单,直接上栗子:

<div class="search-project"> <h4 class="text-muted text-thin">选择项目</h4> <input type="text" class="form-control" placeholder="请输入项目名称" ng-model="query"> </div> <ul class="nav" > <li ng-repeat="project in projectItems | filter:query"> <a class="media-Box p mt0" ng-click="selectProject(project);"> <span class="media-Box-body"> <span class="media-Box-heading"> <i class="fa fa-map-marker"></i> {{project.projectName}} </span> </span> </a> </li> </ul>

了解过ng的朋友,一眼就能明白,在input里的ng-model=‘query’就是双向绑定的变量。而下边的ng-repeat=”project in projectItems | filter:query”,首先就是遍历projectItems这个数组,而filter就是依据query这个字段进行过滤。
可是在js的controller里怎么取得projectItems根据query的过滤结果呢,先给出api地址,https://docs.angularjs.org/api/ng/filter/filter
上边给出了两种写法,一种是html模板里用过滤器,也就是例子中那种用法,还有一种是在js里用filter,正好!!!

//在html模板里
{{ filter_expression | filter : expression : comparator : anyPropertyKey}}// 这里的filter_expression可以理解为source Array
//在js controller里
$filter('filter')(array,expression,comparator,anyPropertyKey)

这里每个参数的意义也给一下简单的解释

参数 类型 详解
array array 目标数组
expression string,object,function 用于筛选目标数组,1.当是字符串时,用于匹配目标array的内容,目标数组里所有带有字符串的数组及对象将会与此字符串进行匹配,matched的将会返回。嵌套结构的数据也会进行匹配,但是带有’!’前缀的将会忽略。2.当是对象时,用于过滤array数组的特定属性。例如,{name:”M”,phone:”1”}将会返回带有name值为M和phone值为1的array项。只匹配属性名可用(举例{$:’text’})来选取带有text属性的对象及嵌套对象。带有‘!’前缀的将会忽略,例如{name:”!M”},将会返回一个数组,包括不含M值得name属性。3.如果是一个function(value,index,array),此函数用于重写过滤器,可以根据index及value值来自由过滤。
comparator function(actual,expected),true,false 这个参数用来配置匹配的规则1.当它是function(act,exp)函数的时候,将会把期望值和实际值哪来比较,并且通过的一定的规则,如果通过则返回true,宣布matched。2.当他是true的时候,值得是function(actual,expected) { return angular.equals(actual,expected)},也就是必须完全匹配才返回true。3.当它是false的时候,它会寻找一个substring的match,及不必完全匹配,像上边栗子中包含对应文字就会matched。默认是false

好了,有了这里的用法及解释,就可以写咯,在controller里用过

$filter('filter')($scope.projectItems,query)

就可以得到依据query过滤的结果。第一个参数是目标数组,第二个参数是根据筛选的关键词,第三个参数默认是false,及包含关键词就返回。第四个参数,没用过。

angularJs中filter的用法及api解释的更多相关文章

  1. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  2. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  5. ios – 上下文类型’NSFastEnumeration’不能与数组文字一起使用

    斯威夫特3,你会这样做吗?解决方法正如您所发现的,您不能使用as-casting将数组文字的类型指定为NSFastEnumeration.您需要找到一个符合NSFastEnumeration的正确类,在您的情况下它是NSArray.通常写这样的东西:

  6. ios – 获取资产目录文件夹中所有图像的数组

    在iOS中,是否可以获取资产目录文件夹中的图像数组?我不确定为什么会对此进行投票.我真的不知道从哪里开始.我的另一种方法是创建文件夹中所有文件的plist,但它似乎是多余的.我无法添加任何代码,因为我会添加什么?

  7. ios – 来自调试器的消息:由于内存问题而终止

    我的应用程序使用Geojson文件.我使用MapBoxSDK将MGLpolyline添加到地图中.但问题是我的文件太大,以至于应用程序崩溃并收到错误:来自调试器的消息:由于内存问题而终止.我在第一次循环时面对66234个对象.我试图将数组块化为新数组,但没有成功.请帮我解决问题.这是我在地图上绘制的代码,这里是我的testprojectongithubuseXcode8.1如果有任何不同的第三方可

  8. ios – Swift – 使用字典数组从字典访问数据时出错

    我有一个非常简单的例子,说明我想做什么基本上,我有一个字典,其值包含[String:String]字典数组.我把数据填入其中,但当我去访问数据时,我收到此错误:Cannotsubscriptavalueoftype‘[([String:String])]?’withanindexoftype‘Int’请让我知道我做错了什么.解决方法您的常量数组是可选的.订阅字典总是返回一个可选项.你必须打开它.更

  9. ios – 在Swift中使用“Map”创建两个数组的超集

    假设我有两个数组:我想组合两个数组,以便我得到一个输出我该怎么做呢?

  10. ios – 基于一个对象内的一个值,根据一个值对NSObject数组进行排序

    我创建了一个对象,它看起来像这样然后将其添加到可变数组.稍后,我计算出每个对象到当前gps位置的距离,并将其添加到对象中并将其放回到数组中.我现在需要根据aOffice.distance的值对该数组进行排序,但不知道该怎么做请有人帮帮我谢谢解决方法

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部