2015-12-28 5 views
0

У меня есть следующий код, и проблема в том, что значение сгружаться с JSON не присваивается переменной VmУгловая «это» не присваивает значение

(function() { 

    angular 
     .module('app', []) 
     .controller('theController', theController); 

    function theController($http) { 
    var vm = this; 
    vm.message = []; 
    vm.message2 = []; 

    fetchJSON(); 
    console.log(vm.message); 
    vm.message2 = vm.message; 

    function fetchJSON() { 
     $http 
     .get('http://beta.json-generator.com/api/json/get/4y2l2jq8l') 
     .success(function(data) { 
      vm.message = data; 
     }); 
    } 
    } 
})(); 

Значение Поручаю vm.message в методе fetchJson не отображается в главном представлении, поэтому, когда я устанавливаю message2 = message, он по-прежнему пуст.

Живая демонстрация: http://codepen.io/matt23/pen/PZbNQa?editors=101

+3

'$ http' является асинхронной, что означает, что позволяет ваш другой код, чтобы продолжать работать и ваш '.success()' запускается позднее. Ваши вызовы 'console.log' и назначения выполняются немедленно, прежде чем произойдет' .success() '. – Claies

+0

Вы правы! Благодарю вас, я целый день проводил решение этой проблемы. –

ответ

0

Вы пробовали настройки vm.message2 внутри функции fetchJSON?

Вы устанавливаете vm.message2 сразу после fetchSON(), поэтому сообщение об успешности еще не определено.

function fetchJSON() { 
 
     $http 
 
     .get('http://beta.json-generator.com/api/json/get/4y2l2jq8l') 
 
     .success(function(data) { 
 
      vm.message = data; 
 
      // HERE 
 
     }); 
 
    }

или вы можете добавить еще один обратный вызов:

.complete(function() { 
 

 
});

+0

Ну, Claies ответ решил мою проблему. Благодарю. –

+0

'.complete' не является методом AngularJS' $ http.get() 'и' .success' устарел. См. Документы - https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – georgeawg

Смежные вопросы