使用来自其余服务的数据配置AngularJS路由

时间:2014-11-11 21:39:31

标签: angularjs angularjs-routing

是否可以使用来自JSON休息服务的数据配置AngularJS路由?

基本上我想做的是使用相同的数据来生成菜单指令和$ routeProvider

module.config()不接受注入的服务,而module.run()似乎与基于promise的数据混合不好。

    var routeData = {
      routes    :
            [
                {
                    'routeUrl' : '/page1',
                    'title' : 'A home for Pizza',
                    'templateUrl' : '/Views/page1.html',
                    'controller' : 'AppCtrl'
                },
                {
                    'routeUrl' : '/page2',
                    'title' : 'Some YouTube video',
                    'templateUrl' : '/Views/page2.html',
                    'controller' : 'AppCtrl'
                },
                {
                    'routeUrl' : '/page3',
                    'title' : 'this is page 3',
                    'templateUrl' : '/Views/page3.html',
                    'controller' : 'AppCtrl'
                }
            ],
      defaultRoute : "/page1"
    };

overviewApp.config(['$routeProvider', function ($routeProvider) {
    var x, current;
    for (x in routeData.routes) {
        current = routeData.routes[x];

        $routeProvider.when(
            current.routeUrl,
            {
                templateUrl: current.templateUrl,
                controller: current.controller
            }
        );
    }

    $routeProvider.otherwise({
    redirectTo: routeData.defaultRoute
  });
}]);

1 个答案:

答案 0 :(得分:2)

如果您想访问配置阶段通常不可用的服务,请参阅angular service available at configuration phase。或者,您还有其他选择:

  • 在(手动)引导Angular应用程序之前,为routeData发出XHR请求。您可以使用:
    • 普通的XMLHttpRequest对象,或
    • 您选择的库/包装器(jQuery等等)或
    • 使用迷你Angular应用访问$http并提出请求。这个迷你应用程序与您的主要Angular应用程序是分开的。见Initialize AngularJS service with asynchronous data
  • 让您的服务器端在Angular执行之前检索并提供routeData

    <script src="//routeData.js"></script>

    <script src="//angular.js"></script>