$ http AJAX调用后范围不更新

时间:2017-01-06 20:27:19

标签: javascript angularjs ajax scope

以下代码在我的控制器中 - 当我到达console.log()行时,没有打印出任何内容。 AJAX调用返回一个有效的数组。我尝试使用$ scope。$ apply但我得到了一个进程中的进程错误,我假设因为使用$ http会自动启动摘要周期:

var mmyApp = angular.module('myApp',['ui.bootstrap']).controller('TasksController',  TasksController);
 function TasksController($scope, $http) {
$scope.transactions = [];
$http.get('transactions').then(function (response) {
             $scope.transactions = response.data;     
     }, function (error) {
         throw error;
     });
console.log($scope.transactions);
}

2 个答案:

答案 0 :(得分:2)

$http.get是异步的。当您致电console.log时,您的GET请求尚未返回。您可以在手柄体内移动它以查看它是否有效:

$http.get('transactions').then(function (response) {
             $scope.transactions = response.data;     
             console.log($scope.transactions);
     }, function (error) {
         throw error;
     });

答案 1 :(得分:1)

您应该知道在AngularJS中使用$http进行的AJAX调用是异步的,也就是说,它们不会与其余代码按顺序运行,除非您按照这种方式设置。

因此,当执行console.log时,请求仍未完成处理。正确的是你在AJAX调用中执行变量赋值后运行console.log

var mmyApp = angular.module('myApp',['ui.bootstrap']).controller('TasksController',  TasksController);
function TasksController($scope, $http) {

    $scope.transactions = [];

    $http.get('transactions').then(function (response) {
        $scope.transactions = response.data;
        console.log($scope.transactions);     
    }, function (error) {
        throw error;
 });
}