Javascript Angular services:如何使用返回的资源对象&x27;在另一个控制器函数中保存数据?

Javascript Angular services:如何使用返回的资源对象&x27;在另一个控制器函数中保存数据?,javascript,angularjs,Javascript,Angularjs,我已经为此挣扎了一段时间,但没有找到一个合适的答案 有一个角度地址服务 services.js appServices.factory('Address', ['$resource', function($resource){ return $resource('addresses/:uuid.json', {}, { query: {method:'GET', params:{ uuid:'addresses' }, isArray: false} });

我已经为此挣扎了一段时间,但没有找到一个合适的答案

有一个角度
地址
服务

services.js

appServices.factory('Address', ['$resource',
  function($resource){
    return $resource('addresses/:uuid.json', {}, {
      query: {method:'GET', params:{ uuid:'addresses' }, isArray: false}
    });
  }
]);
var addressGeo = Address.get( {uuid: $routeParams.uuid},
    function(data)
    { 
        $scope.address = data.response.address;
        $scope.Lat = data.response.address.geoCoord.lat;
        $scope.Lon = data.response.address.geoCoord.lon;
    }
);
该服务用于检索给定地址的经度和纬度,并将两者都附加到作用域:

controllers.js

appServices.factory('Address', ['$resource',
  function($resource){
    return $resource('addresses/:uuid.json', {}, {
      query: {method:'GET', params:{ uuid:'addresses' }, isArray: false}
    });
  }
]);
var addressGeo = Address.get( {uuid: $routeParams.uuid},
    function(data)
    { 
        $scope.address = data.response.address;
        $scope.Lat = data.response.address.geoCoord.lat;
        $scope.Lon = data.response.address.geoCoord.lon;
    }
);
然后,这两个值都应传递给控制器中的另一个函数,以便创建GeoJson对象,但是,它们显示为未定义。正如预期的那样,我可以将它们绑定到显示相应值的视图

提前谢谢你的帮助


欢呼

正如tennisgent在他的评论中指出的,这是一个问题,当您尝试访问作用域上的两个属性时,异步
get()
调用没有得到解决

如果您不想将其他代码放入传递给
get()
的回调中,请使用
$q
使用延迟调用:

var addressDeferred = $q.defer();

var addressGeo = Address.get( {uuid: $routeParams.uuid},
    function(data)
    { 
        $scope.address = data.response.address;
        $scope.Lat = data.response.address.geoCoord.lat;
        $scope.Lon = data.response.address.geoCoord.lon;
        addressDeferred.resolve( data.response.address );
    }
);

addressDeferred.promise.then( function( address ) {
  // Do something with address
} );

在没有看到更多代码的情况下,我猜您的问题在于
Address.get()
调用中的成功回调是异步的。因此,在ajax调用返回之前,您不能访问
$scope.Lat
$scope.Lon
。在此之前,值是未定义的…我相信你是对的,因为如果我将两个变量a转发到的函数放在回调的范围内,它确实可以工作。现在,我想知道是否有可能将两者分开,这样我就不会在一个很长的服务呼叫中包装好所有内容?