【问题标题】:Angular Error: [$injector:unpr] Filtering Error角度错误:[$injector:unpr] 过滤错误
【发布时间】:2015-08-12 13:51:42
【问题描述】:

我有一个 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 问题,我认为我应该调查我的过滤器的提供程序问题......但我似乎找不到任何问题。

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

是什么导致了这个错误?

【问题讨论】:

    标签: javascript angularjs dependency-injection module


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2014-08-01
      • 2016-09-27
      相关资源
      最近更新 更多