在AngularUI Route中使用工厂?

时间:2016-06-11 16:35:12

标签: angularjs angular-ui

我正在编写一个使用AngularUI的路由器的Ionic应用程序。我想使用我编写的工厂查询localstorage,因此我可以确定是否显示首次运行的屏幕。

我的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) {

我收到类似的错误:

  

错误:[$ injector:nomod]模块&#39; storageFactory&#39;不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

我确定我的应用在加载之前已经加载了app.services和storageFactory,但我似乎无法让它正常工作。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你不能在config中提供服务,但你可以在app.run中执行此操作这是调用顺序:

  1. app.config()//只提供可以注入
  2. app.run()
  3. 指令的编译函数(如果它们在dom中找到)
  4. app.controller()
  5. 指令的链接功能(再次,如果找到)
  6. 在您的情况下,您还可以使用路线解析属性

答案 1 :(得分: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
      }]
    }
})