如何在angularjs中提供变量时调用函数

时间:2015-10-21 10:04:37

标签: javascript angularjs

在生成place_id的 geocodePosition 函数中,service.getDetails在同一函数(geocodePosition)中使用该函数。但问题是这个代码不会停止,直到 place_id 并转到使用place_id的 service.getDetails ,这不是生成的。 所以如何等到place_id生成。

function geocodePosition(pos){

   geocoder.geocode({ latLng: pos}, function(responses){
     $scope.place_id=responses[0].place_id;
     console.log('$scope.place_id'+$scope.place_id);
   });

  var map=$scope.map.control.getGMap();
  var service = new google.maps.places.PlacesService(map);
  $scope.$watch(function(){
    return $scope.place_id
  }, function(place_id){
    service.getDetails({placeId: place_id}, function(place, status){
      console.log('place'+place);
    });
  });

}//End of geocodePosition

2 个答案:

答案 0 :(得分:3)

您可以$watch $scope.place_id变量,如果有变更,请致电getDetails

$scope.$watch(function() {
  return $scope.place_id;
}, function(place_id) {
  if (!place_id) {
    return;
  }
  service.getDetails({ placeId: place_id }, function(place, status) {
    console.log('place='+place);
  });
});

答案 1 :(得分:0)

由于geocoder.geocode是异步的:使用$ q来代码中的promocing。

例如:

function geocodePosition(pos){
  q = $q.defer;
  geocoder.geocode({ latLng: pos}, function(responses){
    var place_id=responses[0].place_id;
    console.log('$scope.place_id'+$scope.place_id);
    q.resolve(place_id);
  }
 };

geocodePosition(pos).then(function(place_id){
  //use it here... 
});