角度误差:[$ injector:unpr]过滤错误

时间:2015-05-29 15:54:20

标签: javascript angularjs dependency-injection module

我有一个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 Docs报告的错误,我应该四处寻找缺少的提供者。但是,我似乎无法找到遗漏的东西。这是我的应用文件:

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问题,我认为我应该用我的过滤器调查提供商问题......但我似乎找不到任何错误。

此外,我的代码都没有缩小,所以这不是问题。

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

1 个答案:

答案 0 :(得分:1)

问题是,您正在使用每个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