2014-01-22 6 views
0

Я настраиваю параметры конфигурации, но 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(); 
     }); 

    }); 

ответ

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