我正在编写一个使用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,但我似乎无法让它正常工作。
我该如何解决这个问题?
答案 0 :(得分:0)
你不能在config中提供服务,但你可以在app.run中执行此操作这是调用顺序:
在您的情况下,您还可以使用路线解析属性
答案 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
}]
}
})