2015-04-03 163 views
0

我有这个问题。

在我的控制器中,我有这个。

$scope.spiagge = []; 
var distanza = function(info, posizione) { 
     var request = { 
      origin : posizione, 
      destination : new google.maps.LatLng(info.latitudine, info.longitudine), 
      travelMode : google.maps.TravelMode.DRIVING 
     }; 
     directionsService.route(request, function(response, status) { 
      if (status == google.maps.DirectionsStatus.OK) { 
       //$scope.directionsDisplay.setDirections(response); 

       info.distanza = response.routes[0].legs[0].distance.text; 

       //distanza= response.routes[0].legs[0].distance.value/1000 ; 
      } 

     riempi(info); 

    }); 
//riempi(info); 
} 
var riempi = function(spiaggia) { 
    //alert("distanza " + spiaggia.distanza); 
    $scope.spiagge.push(spiaggia); 
} 

如果我把riempi(info)的为DirectionsService功能外,$scope.spiagge.push作品没有info.distanza。我认为这是因为info.distanza是directionService的局部变量。如果我放在里面,就像在这里的代码一样,它根本不起作用;但是riempi函数可以看到每个信息的值,包括distanza。

我不知道该怎么做。 这是视图

<div class="lista_home" ng-repeat= "spiaggia in spiagge"> 
    <h1>{{spiaggia.nome}}</h1> <p>distanza {{spiaggia.distanza}} km </p> 
    </div> 

对不起,我的英语。 有什么想法?

谢谢。

+0

是'directionsService'异步调用?请求,响应看起来是异步的,而且看起来你可能在你接收到数据之前试图调用你的函数,这意味着你将传递'null'。 – Claies 2015-04-03 14:29:33

+0

感谢您的回答。 我认为这是,没有办法等待结果? – Vincenzo 2015-04-03 14:43:38

+0

@Claies实际上也可能是这种情况,但是您应该解决通话返回的承诺并继续使用'.then'或其他东西。嗯,但我没有得到的是这个'if(status == google.maps.DirectionsStatus.OK)'所以我猜这个承诺已经解决了吗? – Michelangelo 2015-04-03 14:55:06

回答

0

由于googlemaps不是ummm ...'angular'视图不会更新。你可以尝试添加$ scope。$ apply();在你的$ scope.riempi函数的最后?

+0

非常感谢,它的工作原理 – Vincenzo 2015-04-03 16:20:32

0

我认为会发生的是当它在directionService内时,该功能超出范围。您可以尝试使用$rootScope来实现此功能。而不是使变量添加到控制器范围的功能。另外不要忘记在控制器中注入$rootScope作为依赖项。

$scope.spiagge = []; 
    var distanza = function(info, posizione) { 
      var request = { 
       origin : posizione, 
       destination : new google.maps.LatLng(info.latitudine, info.longitudine), 
       travelMode : google.maps.TravelMode.DRIVING 
      }; 
      directionsService.route(request, function(response, status) { 
       if (status == google.maps.DirectionsStatus.OK) { 
        //$scope.directionsDisplay.setDirections(response); 

        info.distanza = response.routes[0].legs[0].distance.text; 

        //distanza= response.routes[0].legs[0].distance.value/1000; 
       } 

      $rootScope.riempi(info);//go to the rootscope and find riempi 

     }); 

    } 
    $scope.riempi = function(spiaggia) { 
     //alert("distanza " + spiaggia.distanza); 
     $scope.spiagge.push(spiaggia); 
    }