2016-01-01 38 views
1

我在我的app.config中使用$urlRouterProvider服務來定義我的AngularJS應用中的默認路由。我把它定義如下:在調用服務後設置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");} 
    }) 
}); 

我的問題是,我想一個布爾變量後設置這些路線flag是使用自定義的服務(databaseService)數據庫中獲取。如果flagtrue,它應該是:

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

如果flagfalse,它應該是:

​​

我怎樣才能做到這一點?我無法在app.config函數中使用自定義服務。另外,我無法在服務中設置配置,因爲配置在加載服務之前已設置。請幫忙!

回答

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