我有一个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问题,我认为我应该用我的过滤器调查提供商问题......但我似乎找不到任何错误。
此外,我的代码都没有缩小,所以这不是问题。
导致此错误的原因是什么?
答案 0 :(得分:1)
问题是,您正在使用每个angular.module
来电重新创建模块。
在声明您的指令,过滤器和控制器时,忽略[]
来电中的angular.module
。
对angular.module
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。