在调用服务后设置AngularJS应用程序配置

时间:2016-01-01 23:31:06

标签: angularjs angular-ui-router angular-services

我在$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之后设置这些路由。如果flagtrue,则应为:

$urlRouterProvider
    .when('/', '/history')
    .otherwise('/history');

如果flagfalse,则应为:

$urlRouterProvider
    .when('/', '/future')
    .otherwise('/future');

我怎样才能做到这一点?我无法在app.config函数中使用自定义服务。此外,我无法在我的服务中设置配置,因为在加载服务之前配置已设置。请帮忙!

1 个答案:

答案 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();
    });
}