2014-01-22 85 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