我正在尝试在我的publicApp.config中进行$ http调用,以便检索与$ urlMatcherFactoryProvider匹配的可用路由数组。
现在,我正在对它们进行硬编码pageUrls = ['about','contact','another-page'];
但是我的快速API中有一个url,它返回一个可用的URL数组。 api网址为"/page-urls"
是否可以在配置中发出$http.get('/page-urls')
请求?我知道在run()
内可以使用$ http,但是我需要在通过$ stateProvider进行路由之前的可用URL列表。
(function() {
'use strict'
var pageUrls = [];
var publicApp = angular.module('publicApp', ['ui.router'])
publicApp.config(['$stateProvider', '$urlRouterProvider', '$urlMatcherFactoryProvider', function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider) {
pageUrls = ['about','contact','another-page'];
var urls = pageUrls.join('|');
var urlMatcher = $urlMatcherFactoryProvider.compile("/{source:(?:" + urls + ")}");
$stateProvider
.state('/', {
url: '/',
templateUrl: "views/home/home.view.html",
controller: "homeCtrl"
})
.state('urls', {
url: urlMatcher,
templateUrl: "views/pages/page.view.html",
controller: "pageCtrl"
});
$urlRouterProvider.otherwise('/');
}]);
})();
答案 0 :(得分:3)
创建一个将$stateProvider
作为注射剂的提供者。提供程序将创建一个服务,该服务执行http请求然后注册路由。在运行块中注入服务并启动路由注册。
这样的事情:
var publicApp = angular.module('publicApp', ['ui.router'])
publicApp.provider('routes', function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider){
function registerRoutes(listOfUrls){
// register routes with $stateProvider
// angular.forEach(listOfUrls, function(url){
// $stateProvider.state...
// });
}
this.$get = function($http){
return {
initialize: function(){
return $http.get('/page-urls').then(function(response){
registerRoutes(response.data);
});
}
};
};
});
publicApp.run(function(routes){
routes.initialize();
});