2014-01-22 37 views
0

我设置了配置参数,但console.log()返回我undefined,我无法理解为什么,我看到从控制台中的http调用返回的json!

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(); 
     }); 

    }); 

回答

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记录的数据,就是把日志语句回调里面是这样的:

$http.get('jsons/json.json').success(function(response) { 
    $rootScope.config.app_genres = response; 
    console.log($rootScope.config.app_genres); 
}); 
+0

现在真的很清楚了!但为什么它仍然返回undefined即使你的例子? :O – sbaaaang

+0

offtopic,它不应该是@scope而不是$ rootScope? –

+0

@RoyiNamir取决于sbaaaang将如何处理它,如果它是一些全局共享配置$ rootScope可能会好,但AngularJS服务可能更好(?)。 – Philipp