提供商依赖在Config AngularJS中不起作用

时间:2015-06-14 19:26:13

标签: angularjs config

我的代码如下。以下代码显示执行以下代码时的依赖性错误。任何帮助都会很棒。还需要Cookie依赖...

错误是

(function(){
    var app=angular.module('achieverpayroll',['ngRoute']);


    app.provider('loginChek',function(){
        this.logFn=function(){
            console.log('test');
        };
    });

    app.config(['$routeProvider', '$httpProvider','loginChekProvider', function($routeProvider, $httpProvider,loginChekProvider){

        loginChekProvider.logFn();

        $routeProvider.when('/home',{
            templateUrl: 'templates/home.html',
            controller: 'categoryController'
        }).
        otherwise({
            redirectTo: '/home'
        });
    }]);
    app.controller('categoryController', function($scope, $http) {

    });

})();

代码app.js

<!DOCTYPE html>
<html ng-app="achieverpayroll">
<head>
    <meta charset="ISO-8859-1">
    <META http-equiv="X-UA-Compatible" content="IE=10">
    <link href="css/style.css" rel="stylesheet" type="text/css"/>
    <script src="js/angular.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="js/angular-route.min.js"></script>
    <script type="text/javascript" src="js/angular-cookies.js"></script>
    <script src="js/app.js" type="text/javascript"></script>

HTML:

Period

...

3 个答案:

答案 0 :(得分:2)

每当您收到角度错误时,您无法真正解码错误消息的含义。尝试加载非最小版本的角度,这将为您提供更具描述性的错误消息,例如在您的情况下,您可能会看到如下内容:

  

未捕获错误:[$ injector:modulerr]由于以下原因导致无法实例化模块plunker:   错误:[$ injector:pget]提供者'loginChek'必须定义$ get factory方法。

非常明显的是,您的 provider 没有与之关联的服务构造函数。它只定义了在配置阶段期间可以访问的提供者函数,这是不够的。例如:

app.provider('loginChek',function(){
      var loggedIn = false;
        //This is accessible only during the config phase before the
        //service loginCheck is even instantiated
        this.logFn=function(){
            loggedIn = true;
            console.log('test');
        };
        //When you inject loginCheck anywhere else you will get a service instance
        //with one method hasLoggedIn
        this.$get = function(){
          return {
            //You can inject services stuffs here like
            //hasLoggedIn:function($http, $q...)
            hasLoggedIn:function(){
              return loggedIn;
            }
          }
        }
    });

<强> plnkr

Doc说:

  

只有在要为应用程序范围的配置公开API时才应使用提供程序配方,该配置必须在应用程序启动之前进行。这通常仅适用于可重用服务,其行为可能需要在应用程序之间略有不同。

提供程序方法logFn无法真正使用任何服务,因为服务尚未实例化(例如,您无法直接在提供程序函数中注入$ http服务,即.provider('loginChek',function($http){),但您可以根据需要注入其他提供商。因此,它们通常仅用于您的服务的简单配置。

答案 1 :(得分:0)

尝试按照以下方式声明您的提供商:

app.provider('loginChek',function(){

    this.$get = function(){
        return {
            logFn: function() { console.log('test') }
        };
    };

});

答案 2 :(得分:0)

当模块由于某些异常而无法加载时会发生此错误。

您是否安装了ngRoute模块?

https://code.angularjs.org/1.3.15/docs/api/ngRoute