2016-02-17 4 views
0

Я использую angularAMD с требуют JS, и я написал службу перехватчик, который я хочу зарегистрировать с $ httpProvider.interceptors в моем файле конфигурации приложения, но он бросает ошибку каккак Вводят обслуживание перехватчик в опции angularAMD конфигурации

Error: [$injector:unpr] http://errors.angularjs.org/1.4.8/ $injector/unpr?p0=cookieInjectorProvider%…eInjector%20%3C-%20%24http%20%3C-%20%24templateRequest%20%3C-%20%24compile(…)

Ниже мой implimentation

define(["angularAMD", "angular-route", "ui-bootstrap","ngCookies","common/service/interceptor-service"], function(angularAMD){ 
"use strict"; 

var app = angular.module("app", ["ui.router", "ui.bootstrap","ngAnimate","ngTouch","angular-carousel","ngCookies"]); 

    //route 
    app.config(["$stateProvider", "$urlRouterProvider", "$locationProvider","$httpProvider", function($stateProvider, $urlRouterProvider, $locationProvider,$httpProvider){ 
    $urlRouterProvider.otherwise('/'); 

    $stateProvider 
    .state("home", angularAMD.route({ 

    url: "/", 
    views: { 

     'header':{ 
      /*...*/ 
     }, 

     }, 
     'content': { 
     /*...*/ 
     }, 

     'footer': { 
     /*...*/ 

     } 
    })); 
    **//angular is not able to find 'cookieInjector' service** 
    $httpProvider.interceptors.push('cookieInjector'); 
    }]); 


    // Bootstrap Angular when DOM is ready 
    return angularAMD.bootstrap(app, false, document.getElementsByTagName("body")[0]); 
}); 

и мой «файл cookieInjector является» эта услуга требует другого сервиса, и это также осуществляется аналогичным образом

define([ 
    'angularAMD', 
    "common/service/cookie-service" 
    ], function(angularAMD){ 
    angularAMD.service("cookieValidator",[function(){ 
     this.isLoggedIn = false; 
     this.getIsLoggedIn = function(){ 
      return this.isLoggedIn; 
     }; 
     this.setIsLoggedIn = function(status){ 
      this.isLoggedIn = status; 
     }; 
    }]) 
    .factory('cookieInjector', ['$q','cookieValidator', 'cookieService',function($q,cookieValidator,cookieService) { 
     var cookieInjector = { 
     request: function(config) { 
      var cookie = cookieService.getCookie(); 
      if(!cookie){ 
      cookieValidator.setIsLoggedIn(false); 
      //$location.path('/login'); 
      }else{ 
      cookieValidator.setIsLoggedIn(true); 
      } 
      config.headers['Token'] = cookie ? cookie : null; 
      return config; 
     }, 
     response: function(response) { 
      response.config.responseTimestamp = new Date().getTime(); 
      return response; 
     }, 
     responseError: function(response) { 
      // Cookie has expired 
      if(response.status === 401 || response.status === 403) { 
       cookieService.destroyCookie(); 
       cookieValidator.setIsLoggedIn(false); 
      } 
      return $q.reject(response); 
     } 
    }; 
    return cookieInjector; 
    }]); 
}) 

Я застрял полностью. Спасибо за любую помощь.

ответ

1

angular is not able to find 'cookieInjector' service

Возможно, это связано с тем, что cookieInjector недоступен в настоящий момент при запуске app.config. Из того, что я помню, angularAMD.factory() будет только объявлять ваш завод/сервис в ваше приложение после того, как был запущен app.config().

Таким образом, в этом случае, другой глобальный угловой модуль должен быть использован вместо использования angularAMD

создать файл с cookieInjector.js

angular.module('cookieModule', []).facotry('cookieInjector', ['$q', 'cookieValidator', 'cookieService', function($q, cookieValidator, cookieService) { 
    var cookieInjector = { 
     request: function(config) { 
      var cookie = cookieService.getCookie(); 
      if (!cookie) { 
       cookieValidator.setIsLoggedIn(false); 
       //$location.path('/login'); 
      } else { 
       cookieValidator.setIsLoggedIn(true); 
      } 
      config.headers['Token'] = cookie ? cookie : null; 
      return config; 
     }, 
     response: function(response) { 
      response.config.responseTimestamp = new Date().getTime(); 
      return response; 
     }, 
     responseError: function(response) { 
      // Cookie has expired 
      if (response.status === 401 || response.status === 403) { 
       cookieService.destroyCookie(); 
       cookieValidator.setIsLoggedIn(false); 
      } 
      return $q.reject(response); 
     } 
    }; 
    return cookieInjector; 
}]); 

Затем инициализация может конфигурацию вашего приложения.

// requireJS config 
requirejs.config({ 
    path:{ 
     cookieInjector: 'path/to/cookieInjector' 
    } 
    // ... your codes 

    shim: { 
     // ... your codes 
     // make sure cookie injector only load after angularJS is loaded. 
     cookieInjector: ["angular"]; 
    } 
}); 

// your app.js (?) file 
define(["angularAMD", "cookieInjector", "angular-route", "ui-bootstrap", "ngCookies", "common/service/interceptor-service"], function(angularAMD) { 
    "use strict"; 

    var app = angular.module("app", ["cookieModule", "ui.router", "ui.bootstrap", "ngAnimate", "ngTouch", "angular-carousel", "ngCookies"]); 

    //route 
    app.config(["$stateProvider", "$urlRouterProvider", "$locationProvider", "$httpProvider", function($stateProvider, $urlRouterProvider, $locationProvider, $httpProvider) { 
     $urlRouterProvider.otherwise('/'); 

     $stateProvider 
     .state("home", angularAMD.route({ 

      url: "/", 
      views: { 

       'header': { 
        /*...*/ 
       }, 

      }, 
      'content': { 
       /*...*/ 
      }, 

      'footer': { 
       /*...*/ 

      } 
     })); 
     // It should be loaded now 
     $httpProvider.interceptors.push('cookieInjector'); 
    }]); 


    // Bootstrap Angular when DOM is ready 
    return angularAMD.bootstrap(app, false, document.getElementsByTagName("body")[0]); 
}); 
Смежные вопросы