2015-04-03 3 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

- это вызов «routesService» для асинхронного вызова? запрос, ответ кажется async, и похоже, что вы пытаетесь вызвать свою функцию, прежде чем вы получите данные обратно, то есть вы будете передавать «null». – Claies

+0

Спасибо за ваш ответ. Я думаю, что нет способа ждать результата? – Vincenzo

+0

@Claies Также может быть и в самом деле, но тогда вы должны решить обещание, возвращенное вызовом, и продолжить с '.then' или что-то в этом роде. Хммм, но то, что я не получаю, это 'if (status == google.maps.DirectionsStatus.OK)', поэтому я думаю, что обещание уже разрешено там? – Michelangelo

ответ

0

Поскольку googlemaps не является ummm ... 'угловым', просмотр не будет обновляться. Можете ли вы попробовать добавить $ scope. $ Apply(); в конце вашей функции $ scope.riempi?

+0

Большое спасибо, это работает – Vincenzo

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); 
    } 
Смежные вопросы