为什么这个var的角度没有更新?

时间:2014-01-10 00:54:41

标签: javascript angularjs

我有一个名为VforumController的控制器和一个名为VforumModel

的模型

VforumController

VforumJS.controller('VforumController', function($scope, VforumModel)
{
        $scope.currentIndex = 0;
        $scope.presentationData.location = "http://a.web.url";

        $scope.currentSlide = VforumModel.getImage({
            'type' : 'slide',
            'index' : $scope.currentIndex + 1,
            'location' : $scope.presentationData.location
        });
});

VforumModel

VforumJS.service('VforumModel', function($http)
{
    return {
        getImage: function($data)
        {
            return $http.post('resources/auth.php', $data, {timeout:20000}).success(function(response)
            {
                console.log(response); //this outputs the correct data I need to the console
                return response;
            });
        }
    }
})

当我执行console.log(response)时,我可以看到我需要的数据,但是,我的控制器中的值不会更新。我假设$scope.currentSlide会转变为我正在寻找的数据。在我的例子中,它是从PHP脚本返回的散列URL。

1 个答案:

答案 0 :(得分:2)

$http返回一个promise,因此您需要等待它加载然后分配它。您不通过承诺“success / then / error”链的返回值直接进行通信。所有通信都是通过promise对象完成的。你“等待”发生了什么事情,一旦它发生了,就会召唤你......他们总是很难解释......

VforumJS.service('VforumModel', function($http){
    return {
      getImage: function($data){
          return $http.post('resources/auth.php', $data, {timeout:20000});
      }
    }
}); 

VforumModel.getImage({
'type' : 'slide',
'index' : $scope.currentIndex + 1,
'location' : $scope.presentationData.location
}).success(function(response) {
       $scope.currentSlide = response;
    }
);