2016-01-01 1 views
1

Я использую службу $urlRouterProvider в своем app.config, чтобы определить маршруты по умолчанию в моем приложении 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). Если flag является true, он должен быть:

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

и если flag является false, он должен быть:

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

Как я могу добиться этого? Я не могу использовать настраиваемую службу в функции app.config. Также я не могу установить конфигурации в своей службе, потому что 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(); 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^