当它包含在.module定义中时,为什么我不能在我的.config中使用localStorage?

时间:2013-09-22 13:20:01

标签: angularjs

我有以下内容:

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

这给了我一个错误:

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) 

在这样的配置中是否无法使用localStorage?我已经包含了localstorage模块的代码,并在app.js之前加载了它。它适用于应用程序的其他部分,但放在app.config

中时,同一行不起作用

2 个答案:

答案 0 :(得分:8)

只有提供程序和常量可在配置块中注入。有关更多见解,请参阅AngularJs文档:http://docs.angularjs.org/guide/module(sektion“模块加载和依赖关系”)。

  

配置块 - 在提供商注册期间执行   和配置阶段。只能注入提供者和常量   到配置块。这是为了防止意外实例化   服务完全配置之前的服务。

答案 1 :(得分:2)

虽然接受的答案正确回答了问题,但它没有提供任何解决方案(Angular新手正在寻找正确的方法)。

您可以在运行时访问服务,这在配置后会发生。例如:

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

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