我正在设置配置参数,但是console.log()
返回给我undefined
我无法理解为什么,我看到json从控制台中的http调用返回!
app.run(function($rootScope, $location,$http){
var update = function (){
$rootScope.config = {};
$rootScope.config.app_name = "Appname";
$rootScope.config.app_short_description = $rootScope.config.app_name+" helps you go out with your rabbit";
$rootScope.config.app_motto = "hey ohhhhhhhhhh <i class='icon-check'></i>";
$rootScope.config.app_url = $location.url();
$rootScope.config.app_path = $location.path();
$http.get('jsons/json.json').success(function(response) {
$rootScope.config.app_genres = response.data;
});
console.log($rootScope.config.app_genres);
}
$rootScope.$on('$routeChangeStart', function(){
update();
});
});
答案 0 :(得分:4)
通常JavaScript是异步的,有一些例外;像alert
这样的旧函数正在阻塞。在AngularJS $http
中,方法是非阻塞的。
所以当你跑步时;
$http.get('jsons/json.json').success(function(response) {
$rootScope.config.app_genres = response;
});
console.log($rootScope.config.app_genres);
请求被发送到jsons/json.json
,并且在请求返回之前不会调用回调.success(function(response) { ...
。
然后代码直接继续到console.log
语句,在那里它记录未定义,因为尚未调用回调。
如何让console.log
记录数据,将log语句放在回调中,如下所示:
$http.get('jsons/json.json').success(function(response) {
$rootScope.config.app_genres = response;
console.log($rootScope.config.app_genres);
});