Как отобразить данные ответа ($ http) с сервера в AngularJS

Как отобразить данные ответа (получить) с сервера в AngularJS

в моем коде мне нужно предупредить $scope.orders внутри этого контроллера, но он не будет отображаться.

function OrderController($scope,$http)
{
    var orderPromise = $http.get("../api/order");

    orderPromise.success(function(data, status, headers, config) 
    {
        $scope.orders=data
        alert(JSON.stringify($scope.orders))  // First alert 
    });

    orderPromise.error(function(data, status, headers, config) 
    {
        alert("Error");

    });

    alert(JSON.stringify($scope.orders))    // Second alert 
}

Как я могу получить доступ к $scope.orders за пределами успеха fun() Здесь я предупреждаю $scope.data в два раза Здесь показано первое предупреждение, но второе предупреждение ничего не показывает, почему? Как показать второй?


person symon kt1    schedule 09.02.2016    source источник
comment
Возможный дубликат http://stackoverflow.com/questions/25043534/angularjs-scope-issue-in-http-success-callback   -  person Matheno    schedule 09.02.2016
comment
Причина, по которой первое предупреждение работает, а второе нет, заключается в том, что выполнение первого откладывается до тех пор, пока обещание не будет успешно выполнено... это может занять от миллисекунд до секунд, в зависимости от запроса. Однако второй выполняется почти сразу после создания экземпляра контроллера, поскольку он запускается сразу после определения обработчиков промисов (не выполняется). Что именно вы пытаетесь сделать с данными? Если вы просто хотите отобразить его, привяжите $scope.orders в своем представлении, и он автоматически отобразится после разрешения промиса.   -  person GPicazo    schedule 09.02.2016


Ответы (1)


Второе оповещение не будет отображаться, потому что в $scope.orders ничего нет, когда вы его оповещаете. Такова природа асинхронных вызовов, только когда вы войдете в разделы успеха/ошибки, у вас будет что-то там (или нет...).

Пока сервер не вернет ваш ответ и не сработает функция success/error, эта переменная останется незаполненной, поскольку $scope.orders=data еще не запущена.

Вы должны прочитать документы для получения дополнительной информации и более глубокого понимания как работают обещания.

person Omri Aharon    schedule 09.02.2016
comment
AOmri, как я могу получить доступ к этим $scope.orders во второй раз, какое-либо решение для этого ... Thnakyou. Я новичок, считайте меня - person symon kt1; 09.02.2016
comment
@symonkt1 Вы не можете по той причине, о которой я упоминал. Только внутренний успех. - person Omri Aharon; 09.02.2016
comment
О, хорошо, Омри, я понял, я прочитал документ. Спасибо за ваши комментарии .. Еще одна вещь, могу ли я отправить это на завод и перезвонить на тот же контроллер? - person symon kt1; 09.02.2016
comment
@symonkt1 Да, даже предпочтительно. - person Omri Aharon; 09.02.2016