AngularJS:如何将http调用与变量同步?

时间:2015-11-07 16:51:27

标签: javascript angularjs angular-http

我试图在控制器内部执行一般功能,该控制器从后端向我提供数据并将此数据分配给变量。

我已经制作了这段代码,但它无法正常使用。

self.getData = function(url){
    var deferred = $q.defer();

    $http.get(url)
    .success(function(data){
        deferred.resolve(data);
        console.log("Total profiles: " + data.data.length);         
    })
    .error(function(error){
        //do something
    });

    return deferred.promise;
};

$scope.data = self.getData(ServiceURL.url[7]);
console.log("Total profiles inside function: " + $scope.data.length);

对该函数的调用工作正常并正确地给出了配置文件的总数,但是当我尝试将此数据分配给$ scope.data时,它不能正常工作,因为当我尝试显示所有配置文件时console.log(" Total profiles:" + $ cope.data.data.length)我有下一个出口:

函数外的总配置文件:$ scope.data:undefined

此外,执行不同步,因为首先尝试显示$ scope.data的值,然后显示后端的值。

如何同步此调用并正确地将函数的退出分配给$ scope.data变量?

有什么方法可以用服务做我想要的吗?我试图这样做,但$ q变量总是未定义,我不知道如何正确传递。你有什么例子可以正常工作吗?

enter image description here

2 个答案:

答案 0 :(得分:2)

你不能只在函数中设置$ scope.data,然后调用函数,如。

MPMediaItemPropertyTitle : @""

答案 1 :(得分:1)

ONE OPTION

是在self.getData()的返回调用中分配$ scope.data。 像这样:

$http.get(url)
    .success(function(data){
        deferred.resolve(data);
        $scope.data = self.getData(ServiceURL.url[7]); //Here is it.
        console.log("Total profiles: " + data.data.length);         
    });