如何在JavaScript中使用过滤器而不是HTML

52

我正在使用AngularJS,它非常棒。 我在文档中找不到 - 在JavaScript中,与这个AngularJS表达式相当的是什么:

<div>{{ (myList| filter:mySearch).length }}</div>

谢谢你的帮助。


1
可能是重复的问题:如何在AngularJS控制器中使用过滤器? - pkozlowski.opensource
你说得对,我没有搜索足够多的资料。这是同样的事情,抱歉重复了。 - A-Palgy
3个回答

86

这是关于Angular的筛选器文档

在HTML模板绑定中

{{ filter_expression | filter:expression }}

在JavaScript中

$filter('filter')(array, expression)

在您的情况下,它看起来像这样$filter('filter')(myList, mySearch)


3
谢谢,这正是我想做的,但是我在使用$filter时遇到了问题,它显示“未定义”。我没有包含它...现在已经包含了,它可以正常工作了。谢谢! - A-Palgy
1
字符串 'filter' 是什么作用? - neaumusic
1
同上 -- 在柯里链的第一个链接中,'filter' 的目的是什么? - Cody
4
$filter('filter') 返回过滤器函数,其中 'filter'是您想要的过滤器名称。在这种情况下,由于它是一个通用过滤器,Angular团队决定将其命名为 'filter' - bmleite
3
您可以使用 $filter 在JavaScript代码中对数组使用AngularJS过滤器功能。比如说您想要根据属性 sum 对一个对象数组进行排序,您可以像这样做:$filter('orderBy')(myArr, "sum", false) - 这与在 ng-repeat 中使用 orderBy 的效果一样:ng-repeat="t in myArr | orderBy:'sum':false"。 因此,如果您的代码中需要获取按照 ng-repeat 中的方式排序后的数组版本,则这个功能非常方便。 请记住,它只能在 $scope 中工作。我习惯将我的 $scope 存储在全局变量 $gs 中。这样测试会更容易:$gs.$filter... - Netsi1964
显示剩余2条评论

6
作为另一种语法,您也可以直接注入过滤器,而不必经过 $filter 服务。例如,要将 filter 过滤器注入到控制器中,您可以编写以下代码:
MyCtrl = function($scope, filterFilter) {

  $scope.filtered = filterFilter(myArray, expression);
}

一个非常类似的问题是如何在控制器中使用过滤器?


2
在你的HTML中
<input ng-model="search">
<div ng-repeat="thing in things | filter:searchResults"></div>

在您的JS中
$scope.$watch('search', function (newValue, oldValue) {
  var searchResults = filterFilter($scope.things, $scope.search);
});

你知道如何使用Fuzzy代码来实现这个吗?github.com/a8m/angular-filter#fuzzy - beanic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接