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

AngularJS: How to sync an http call with a variable?

我正在尝试在控制器内执行一个通用功能,该功能从后端给我数据并将此数据分配给一个变量。

我制作了这段代码,但它不能正常工作。

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:未定义

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

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

有什么方法可以用服务做我想做的事吗?我正在尝试这样做,但 $q 变量始终未定义,而且我不知道如何正确传递。你有任何工作正常的例子吗?

一个选项

是在 self.getData() 的 return 调用中分配你的 $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);         
    });

你不能只在一个函数中设置 $scope.data,然后像这样调用函数。

  function getProfiles(){
    $http.get(url).success(response){
        $scope.data = response;
     } 
  getProfiles();