Angular Error: [$injector:unpr] Filtering Error

Angular Error: [$injector:unpr] Filtering Error

我有一个 Angular 应用程序向我抛出此错误:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.27/$injector/unpr?p0=advFilterNameFilterProvider%20%3C-%20advFilterNameFilter
    at Error (native)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:6:450
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:36:202
    at Object.c [as get] (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:34:305)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:36:270
    at Object.c [as get] (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:34:305)
    at $get [as $filter] (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:125:335)
    at gb.filter (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:172:465)
    at gb.filterChain (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:172:391)
    at gb.primary (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js:169:270)

根据 Angular 文档的错误报告,我应该四处寻找缺少的提供者。但是,我似乎找不到缺少的东西。这是我的应用程序文件:

angular.module('programApp', [
    'ngResource',
    'ngRoute',
    'programApp.controllers',
    'programApp.directives',
    'programApp.filters',
    'uiSwitch'
]).config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
    $locationProvider.hashPrefix(''); 
    $locationProvider.html5Mode(true);
}]);; 

这是我的控制器文件的顶部:

angular.module('programApp.controllers', [])
.controller('programController', ['$scope', '$http', '$filter', '$timeout', '$rootScope', '$location', 
                                  function($scope, $http, $filter, $timeout, $rootScope, $location){

我还有 2 个自定义过滤器:

angular.module('programApp.filters', []).filter('filterName', function(){
//my filter code here
}).filter('advFilterName', function(){
//my other filter code here
});

这是我的一个指令:

angular.module('programApp.directives', [])
.directive('ngEnter', function () {
//directive code here
});

根据错误代码和其他 SO 问题,我认为我应该调查我的过滤器的提供商问题...但我似乎找不到任何问题。

另外,我的 none 代码被缩小了,所以这不是问题。

导致此错误的原因是什么?

问题是您在每次 angular.module 调用时重新创建模块。

在声明您的指令、过滤器和控制器时,从您的 angular.module 调用中省略 []

angular.module

的标准 2-arg 调用
angular.module('programApp', [])

适合 声明 您的模块...但在随后的 angular.module 调用中包含第二个参数 ([]) 实际上会重新创建您的模块.

换句话说,一旦你声明了你的 `prgoramApp' 模块,你的过滤器应该这样声明

angular.module('programApp').filter('filterName', function(){
    //my filter code here
}).filter('advFilterName', function(){
    //my other filter code here
});

(在 angular.module 的调用中没有 []

有关这方面的更多信息,请参阅 Creation vs Retrieval section of the Angular Module docs