【问题标题】:Call ordinary filter function in AngularJS controller在 AngularJS 控制器中调用普通过滤器函数
【发布时间】:2018-09-07 11:19:18
【问题描述】:

在我看来,我使用一个函数来过滤选择框中的一些项目:

<select class="..."
  ng-model="selectedItem"
  ng-options="item.name for item in items | filter:filterItems(someArgument)">
</select>

这个函数在控制器中定义为普通函数,它不是AngularJS过滤器:

$scope.filterItems = function(someArgument) {
  return function(item) {
    // Do something

    return someResult;
  }
};

这很好用。

但是,现在我想在控制器中使用相同的过滤器功能,并计算过滤后的项目数。

我不能使用这个代码,因为filterItems() 不是 AngularJS 过滤器:

$scope.countFilteredItems = function() {
  return $filter('filterItems')($scope.items, someArgument).length;
};

有什么方法可以在控制器中使用我的过滤器功能,而无需自己实际重新实现整个过滤过程?我可以将$filter 服务与我的香草过滤器功能一起使用吗?

【问题讨论】:

  • 你读过the docs吗?您可以将任意谓词函数传递给$filter
  • 像这样:$filter('filter')($scope.items, $scope.filterItems(someArgument))?

标签: angularjs angularjs-filter


【解决方案1】:

正如@jonrsharpe 在他的评论中所建议的那样,我设法使用$filter 服务调用了我的过滤器函数:

$scope.countFilteredItems = function() {
  var filteredItems = $filter('filter')($scope.items, $filterItems(someArgument));

  var count = 0;
  if (filteredItems !== undefined && filteredItems !== null) {
    count = filteredItems.length;
  }

  return count;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多