【问题标题】:How to use a filter in javascript instead of the Html如何在 javascript 中使用过滤器而不是 Html
【发布时间】:2013-02-18 12:11:02
【问题描述】:

我正在使用 AngularJS,它很棒。 我在文档中找不到它 - Javascript 中与此 AngularJS 表达式等效的是什么:

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

感谢您的帮助。

【问题讨论】:

标签: angularjs


【解决方案1】:

在 Angular 的 filter documentation:

在 HTML 模板绑定中

{{ 过滤器表达式 |过滤器:表达式}}

在 JavaScript 中

$filter('filter')(数组,表达式)

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

【讨论】:

  • 谢谢,这就是我的想法,但我遇到了 $filter 被“未定义”的问题。我没有包括它..现在它被包括在内并且这正在工作。谢谢!
  • 字符串 'filter' 有什么作用?
  • 同上 -- 在 Curry 链的第一个链接中 'filter' 的目的是什么?
  • @Cody $filter('filter') 返回过滤器函数,其中'filter' 指的是您想要的过滤器的名称。在这种情况下,由于它是一个通用过滤器,Angular 团队决定将其命名为'filter'
  • 您可以使用 $filter 在您的 javascript 代码中对数组使用 AngularJS 过滤功能。假设您想对属性sum 上的对象数组进行排序。你可以这样做:$filter('orderBy')(myArr, "sum", false) - 这与在 ng-repeat 中这样做是一样的:ng-repeat="t in myArr | orderBy:'sum':false"。因此,如果在您的代码中的某个地方,您需要得到一个按ng-repeat 排序的数组版本,这很方便。请记住,它仅适用于scope。我曾经将我的$scope 存储在全局$gs 中。使测试更容易:$gs.$filter...
【解决方案2】:

作为替代语法,您也可以直接注入过滤器,而无需通过$filter 服务。例如,将filter 过滤器注入到您的控制器中,您可以编写:

MyCtrl = function($scope, filterFilter) {

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

一个与How to use a filter in a controller?非常相似的问题

【讨论】:

    【解决方案3】:

    在你的 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);
    });
    

    【讨论】:

    • 你知道如何用模糊代码做到这一点吗? github.com/a8m/angular-filter#fuzzy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多