代码之家  ›  专栏  ›  技术社区  ›  user1438038

在AngularJS控制器中调用普通过滤函数

  •  0
  • user1438038  · 技术社区  · 6 年前

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

    <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 我的香草过滤功能的服务?

    1 回复  |  直到 6 年前
        1
  •  0
  •   user1438038    6 年前

    我设法用 $filter 服务,正如@jornsharpe在评论中所说:

    $scope.countFilteredItems = function() {
      var filteredItems = $filter('filter')($scope.items, $filterItems(someArgument));
    
      var count = 0;
      if (filteredItems !== undefined && filteredItems !== null) {
        count = filteredItems.length;
      }
    
      return count;
    };