2013-09-22 9 views
5

Mam następujący:Dlaczego nie mogę użyć localStorage w moim pliku .config, gdy jest on dołączony do definicji .module?

var app = angular 
    .module('app', ['ui.router', 'admin', 'home', 'questions', 'ngResource', 'LocalStorageModule']) 
    .config(['$sceProvider', '$stateProvider', '$locationProvider', 'localStorageService', 
     function ($sceProvider, $stateProvider, $locationProvider, localStorageService) { 

     $sceProvider.enabled(false); 
     $locationProvider.html5Mode(true); 

     localStorageService.add('adminContent', 'xx'); 

To daje mi błąd:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to: 
Error: [$injector:unpr] Unknown provider: localStorageService 
http://errors.angularjs.org/1.2.0-rc.2/$injector/unpr?p0=localStorageService 
    at hasOwnPropertyFn (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:78:12) 
    at http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:2997:19 
    at getService (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3119:39) 
    at Object.invoke (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3140:13) 
    at http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3078:37 
    at Array.forEach (native) 
    at forEach (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:224:11) 
    at loadModules (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3065:5) 
    at createInjector (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3007:11) 
    at doBootstrap (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:1152:20) 
http://errors.angularjs.org/1.2.0-rc.2/$injector/modulerr?p0=app&p1=Error%3…http%3A%2F%2F127.0.0.1%3A81%2FScripts%2Fangular-v1.2.0-rc.2.js%3A1152%3A20) 

Czy nie można użyć localStorage w config jak to? Załączam kod modułu localstorage i jest on ładowany przed app.js. Działa w innych częściach aplikacji, ale ta sama linia nie działa po umieszczeniu w aplikacji .config

Odpowiedz

8

Tylko dostawcy i stałe są wstrzykiwane w bloki konfiguracyjne. Więcej informacji można znaleźć w dokumentacji AngularJs: http://docs.angularjs.org/guide/module (sektion "Ładowanie modułu & Zależności").

Configuration blocks - get executed during the provider registrations and configuration phase. Only providers and constants can be injected into configuration blocks. This is to prevent accidental instantiation of services before they have been fully configured.

+0

Możesz obejść to z "wtryskiwaczem $", nieprawdaż? – Casey

1

Choć przyjął odpowiedź prawidłowo odpowie na pytanie, nie oferuje żadnego rozwiązania (kątowego początkujących szukających dobrej drodze, aby to zrobić).

Masz dostęp do usług w czasie wykonywania, co dzieje się po skonfigurowaniu. Na przykład:

angular.module('app').run(storeAdminContent); 

storeAdminContent.$inject = ['localStorageService']; 
function storeAdminContent(localStorageService) { 
    localStorageService.add('adminContent', 'xx'); 
} 
+0

Chcę sprawdzić, czy mam sesję, czy nie, a metoda run byłaby wykonywana po konfiguracji, więc czy mam to sprawdzić przed routingiem zdefiniowanym w config? – Yatin

+0

Byłoby to możliwe, ale byłoby to sprzeczne z projektem kanciastym. Trasy administratora powinny zawsze istnieć, ale powinieneś upewnić się, że użytkownik jest uwierzytelniony po wejściu na te trasy. Inną (być może lepszą) opcją byłoby posiadanie całkowicie oddzielnej aplikacji kątowej po stronie administratora i udostępnienie kodu między nimi za pomocą modułów węzła lub altany. –

Powiązane problemy