我想在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 文件,然后在整个应用程序中访问它?
谢谢!
答案 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);
});