2015-04-03 161 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); 
    }