我在$urlRouterProvider
中使用app.config
服务来定义AngularJS应用程序中的默认路由。我将其定义如下:
app.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider
.when('/', '/history')
.otherwise('/history');
$stateProvider
.state('tabs', {
abstract: true,
url: '/',
template: '<my-tab></my-tab>',
onEnter: function(){console.log("enter");}
})
});
我的问题是我想在使用自定义服务(databaseService)从数据库中获取布尔变量flag
之后设置这些路由。如果flag
为true
,则应为:
$urlRouterProvider
.when('/', '/history')
.otherwise('/history');
如果flag
为false
,则应为:
$urlRouterProvider
.when('/', '/future')
.otherwise('/future');
我怎样才能做到这一点?我无法在app.config函数中使用自定义服务。此外,我无法在我的服务中设置配置,因为在加载服务之前配置已设置。请帮忙!
答案 0 :(得分:0)
假设您在应用程序开始时更改了一次,您可以执行以下操作(docs):
var routerProvider = null; // reference router for run phase
angular
.module('app')
.config(config)
.factory('databaseService', databaseService)
.run(run);
config.$inject = ['$urlRouterProvider'];
run.$inject = ['$urlRouter', 'databaseService'];
function config($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
routerProvider = $urlRouterProvider;
}
function databaseService() {
return {
getDbFlag: function() {
// connect to db and fetch data
}
};
}
function run($urlRouter, databaseService) {
databaseService.getDbFlag()
.then(function (serviceData) {
// set the route with data from the DB
routerProvider.otherwise(serviceData.route);
$urlRouter.sync();
$urlRouter.listen();
});
}