2016-06-11 41 views
0

我正在编写一个使用AngularUI的路由器的Ionic应用程序。我想用我写的工厂查询localstorage,这样我就可以决定是否显示首次运行的屏幕。顺序在AngularUI Route中使用工厂?

我的index.html负载脚本:

<script src="js/app.js"></script> 
    <script src="js/controllers.js"></script> 
    <script src="js/services.js"></script> 
    <script src="js/routes.js"></script> 
    <script src="js/directives.js"></script> 
    <script src="js/filters.js"></script> 

我的路线的配置看起来像这样(截断简洁):

angular.module('app.routes', []) 

.config(function($stateProvider, $urlRouterProvider, storageFactory) { 
    $stateProvider 
    .state('myApp.mainscreen', { 
    url: '/main', 
    views: { 
     'side-menu21': { 
     templateUrl: 'templates/main.html', 
     controller: 'mainCtrl' 
     } 
    } 
    }) 

// ... 

$urlRouterProvider.otherwise('/menu/main') 

现在我有一个名为app.services模块,包含我的工厂,storageFactory(我知道,我将把它移出服务模块;))。当我尝试注入storageFactory像这样:

angular.module('app.routes', ['app.services', 'storageFactory']) 
.config(function($stateProvider, $urlRouterProvider, storageFactory) { 

我得到类似这样的错误:

Error: [$injector:nomod] Module 'storageFactory' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

我敢肯定,我的应用程序加载app.services和storageFactory之前加载,但我似乎无法让它正常工作。

我该如何解决这个问题?

+0

配置运行时服务尚不可用。尽管你可以注入一个状态解析器。你想做什么? – charlietfl

+0

我想检查'localstorage'中的一个名为'firstrun'的值。如果未设置,请显示“欢迎使用我的应用程序”屏幕。如果已设置,请进入主屏幕。 – DrFrankly

+0

使用解决方案然后 – charlietfl

回答

0

你可以注入在UI路由器决心块的工厂,没有在配置块注射它们,因为它只能与供应商进行注射。例如:

$stateProvider 
    .state('myApp.mainscreen', { 
    url: '/main', 
    views: { 
     'side-menu21': { 
     templateUrl: 'templates/main.html', 
     controller: 'mainCtrl' 
     } 
    }, 
    resolve: { 
     firstRun: ['storageFactory', function(storageFactory) { 
     // Do what you want with storageFactory here! 
     // Full infos here: https://github.com/angular-ui/ui-router/wiki#resolve 
     }] 
    } 
}) 
+0

您的答案和@ charlietfl关于服务不可用时提示配置运行时给我我正在寻找的答案。现在我的应用程序在开始之前显示一个很好的教程谢谢! – DrFrankly

0

你不能注入中配置服务只提供,但你可以在app.run做这里的调用顺序:

  1. 的app.config()//只提供可以注入
  2. app.run ()
  3. 指令的编译功能(如果它们在DOM中找到)
  4. app.controller()
  5. 指令的链接功能(再次,如果找到)

你的情况,你也可以使用航线resolve属性