"Unknown Provider" 将自定义过滤器注入服务时
"Unknown Provider" when injecting custom filter into service
我正在尝试使用自定义过滤器过滤我的搜索应用程序的结果。现在,angular 文档指出您应该避免定义有状态过滤器。我的解决方法是构建一个处理过滤器输入的服务和将这些输入作为参数对象的自定义过滤器。
这个概念工作得很好,而我有一个实现只是在具有自定义过滤功能的服务中执行此操作。
现在我将其移至过滤器声明,如下所示:
referenceFilter.filter.js
(function () {
'use strict';
angular.module('searchApp.search')
.filter('referenceFilter', function () {
return function (references, filterModel) {
var filteredReferences = [];
/* filtering */
return filteredReferences;
}
});
})();
现在,当我尝试将过滤器注入我的服务时,我收到 "Unknown Provider"-错误,指出它无法为我的 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.
我正在尝试使用自定义过滤器过滤我的搜索应用程序的结果。现在,angular 文档指出您应该避免定义有状态过滤器。我的解决方法是构建一个处理过滤器输入的服务和将这些输入作为参数对象的自定义过滤器。
这个概念工作得很好,而我有一个实现只是在具有自定义过滤功能的服务中执行此操作。 现在我将其移至过滤器声明,如下所示:
referenceFilter.filter.js
(function () {
'use strict';
angular.module('searchApp.search')
.filter('referenceFilter', function () {
return function (references, filterModel) {
var filteredReferences = [];
/* filtering */
return filteredReferences;
}
});
})();
现在,当我尝试将过滤器注入我的服务时,我收到 "Unknown Provider"-错误,指出它无法为我的 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.