“未知Provider"将自定义过滤器注入服务时

"Unknown Provider" when injecting custom filter into service

本文关键字:过滤器 自定义 注入 服务 未知 Provider quot      更新时间:2023-09-26

我试图用自定义过滤器过滤搜索应用程序的结果。现在,angular文档指出你应该避免定义有状态过滤器。我的解决方法是构建一个服务来处理过滤器输入和自定义过滤器,它将这些输入作为参数对象。

这个概念工作得很好,而我有一个实现,它只在服务中使用自定义过滤功能。现在我把它移到一个过滤器声明中,像这样:

referenceFilter.filter.js

(function () {
'use strict';
angular.module('searchApp.search')
    .filter('referenceFilter', function () {
        return function (references, filterModel) {
            var filteredReferences = [];
            /* filtering */
            return filteredReferences;
        }
    });
})();

现在,当我试图将过滤器注入到我的服务中时,我得到了"未知提供者"-错误声明它无法为我的referenceFilter找到提供者。虽然我认为它的注入是正确的,并且是在服务之前定义的。

referenceFilter.service.js

(function () {
    'use strict';
    angular.module('searchApp.search')
        .factory('referenceFilterService', ['referenceFilter', referenceFilterService]);
    function referenceFilterService(referenceFilter) { // 'reference' | 'referenceFilter' doesnt make a difference
              ....
              /* filter call */
              function getFilteredReferences(references) {
                    return referenceFilter(references, filterModel);
              }
              ....
    }
})();

包含在index.html

<script src="search/search.module.js"></script>
<script src="search/filter/referenceFilter.filter.js"></script>
<script src="search/filter/referenceFilter.service.js"></script>

我做错了什么?

你不应该直接注入你的过滤器,而应该使用内置的$filter服务:

angular.module('searchApp.search')
    .factory('referenceFilterService', ['$filter', referenceFilterService]);
function referenceFilterService($filter) {
    var referenceFilter = $filter('referenceFilter');
    // etc.