Angular js - 无法将json带入$ rootScope

时间:2014-01-22 11:35:37

标签: javascript json angularjs http rootscope

我正在设置配置参数,但是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(); 
        });

    });

1 个答案:

答案 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);
});