我正在尝试创建自定义过滤器,但是当我尝试将其注入(inject) Controller 时,出现“未知提供程序”错误。我已经检查并仔细检查了所有引用资料,但我看不出有什么问题。
我知道该文件在我的 index.html 中被正确引用,它被加载并且可以被检查员找到。这是我的代码:
在我的 app.js 中:
angular.module('equiclass', ['equiclass.controllers',
'equiclass.services',
'ngRoute'])
.config(function ($routeProvider) {
$routeProvider
.when('/courses', {
templateUrl: 'views/courses.html',
controller: 'CourseCtrl'
// And some other stuff with routes
});
angular.module('equiclass.controllers', ['equiclass.services', 'equiclass.filters']);
angular.module('equiclass.services', []);
angular.module('equiclass.filters', []);
我的过滤器:
angular.module('equiclass.filters')
.filter('testFilter', function() {
return function(input) {
return undefined;
};
});
和 Controller :
angular.module('equiclass.controllers')
.controller('CourseCtrl', function ($scope, testFilter) {
});
当然,这很简单,但它不起作用,我不明白为什么。我提供了几项服务,它们都很好地工作和玩耍。
最佳答案
您不需要注入(inject)过滤器本身。
这段代码...
angular.module('equiclass.controllers')
.controller('CourseCtrl', function ($scope, testFilter) {
});
应该
angular.module('equiclass.controllers')
.controller('CourseCtrl', function ($scope) {
});
在
CourseCtrl
内,您应该像往常一样使用过滤器。将模块
'equiclass.filters'
注入(inject)您的模块 'equiclass.controllers'
就足够了。我有一个类似的问题,并发表了一篇关于它的帖子 on my blog 。
- 编辑
正如 n00dl3 在下面提到的,棘手的部分是自动命名约定在 Angular 中的工作方式。如果您将过滤器命名为
specialNumberFilter
,那么当您注入(inject)它时,您需要将其称为 specialNumberFilterFilter
。这允许您将过滤器用作函数,这就是它的本质。// In a controllervm.data = specialNumberFilterFilter(vm.data, 'a');
但是我相信如果过滤器用于正在评估的字符串表达式中,例如 watch ,您也可以使用过滤器而不将其注入(inject) Controller ,因为这与您在模板中使用它时的场景相同.
// Inside a watch - no controller injection required`$scope.$watch('vm.data | specialNumberFilter', function(new, old) { ... })`
关于AngularJS 1.x 自定义过滤器无法注入(inject),未知提供者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23105315/