在Angular中加载配置文件,在其他所有内容之前

时间:2015-03-27 08:13:59

标签: javascript angularjs

我想在Angular应用程序中加载配置文件,这只是第一次打开应用程序时。然后,配置变量在整个应用程序中全局可用。以下是我在 app.js 中提出的内容:

angular
  .module('myApp', [
    ...
  ])
  .run(
    [ '$rootScope', '$http',
      function ($rootScope,  $http) {

        $http.get('config/config.json').success(function(data) {
            $rootScope.config = data;
        });


      }
    ]
  )

这里我加载 config.js ,当我尝试在我的控制器中使用它时,如下所示:

  angular.module('myApp')
    .controller('MainCtrl', function ($rootScope) {
      console.log($rootScope, $rootScope.config);
    })

对于 $ rootScope ,我可以看到所有属性,包括 config ,但 $ rootScope.config 会返回 undefined

如何在第一页加载时加载 config 文件,然后在整个应用程序中访问它?

谢谢!

2 个答案:

答案 0 :(得分:1)

Mark Colemans blog post about this中所述,您可以获取配置,然后加载应用程序。为方便起见,使用Mark代码:

var urlToCheck = '/echo/json/';

var myApp = angular.module('myApp', []);

myApp.controller("MyCtrl", ["$scope", "config", function ($scope, config) {
    $scope.url = config.url;
}]);

$.ajax({
    url: urlToCheck
}).fail(function () {
    myApp.constant('config', {
        url: '/fail-url'
    });
}).done(function () {
    myApp.constant('config', {
        url: '/done-url'
    });
}).always(function () {
    angular.bootstrap(document, ['myApp']);
});

答案 1 :(得分:0)

您可以将其初始化为承诺,然后在承诺解决后在控制器中访问它。也拒绝承诺。

http://plnkr.co/edit/EIBJhZg80lpeyhkMD3FD

$q.when($rootScope.config).then(function (config) {
  console.log($rootScope.config, config);  
});