Why can't I use the localStorage in my .config when it's include in the .module definition?

自古美人都是妖i 提交于 2019-12-08 20:01:55

问题


I have the following:

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');

This is giving me an error:

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) 

Is it not possible to use localStorage in config like this? I have included the code for the localstorage module and it's loaded before the app.js. It works in other parts of the application, but the same line does not work when placed in the app.config


回答1:


Only providers and constants are injectable in configuration blocks. See the AngularJs documentation for more insights: http://docs.angularjs.org/guide/module (sektion "Module Loading & Dependencies").

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.




回答2:


While the accepted answer correctly answers the question, it does not offer any solution (for Angular newbies looking for the right way to do this).

You have access to services at run time, which happens after configuration. For instance:

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

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


来源:https://stackoverflow.com/questions/18944268/why-cant-i-use-the-localstorage-in-my-config-when-its-include-in-the-module

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!