14

I integrare angular-google-maps nella mia applicazione mobile cordova. Voglio aggiornare la mappa usando la seguente funzione.

 function refreshMap() { 
      $scope.map.control.refresh({ 
       latitude: $scope.location.T_Lat_Deg_W.value, 
       longitude: $scope.location.T_Long_Deg_W.value 
      }) 
     } 

Ma errore apprears

angular.js:13540 TypeError: $scope.map.control.refresh is not a function

at Scope.refreshMap (mapController.js:122) 
at fn (eval at <anonymous> (angular.js:1), <anonymous>:4:224) 
at expensiveCheckFn (angular.js:15475) 
at callback (angular.js:25008) 
at Scope.$eval (angular.js:17219) 
at Scope.$apply (angular.js:17319) 
at HTMLAnchorElement.<anonymous> (angular.js:25013) 
at defaultHandlerWrapper (angular.js:3456) 
at HTMLAnchorElement.eventHandler (angular.js:3444) 

Ecco l'JSFiddle example per questo problema.

C'è un modo per risolvere questo problema? Grazie !

+3

Puoi mostrare altro codice? Tutto il tuo controller e il tuo tag della mappa? – kabaehr

+0

Sto affrontando lo stesso problema da quando ho aggiornato a Angular 1.5 e angular-google-maps 2.3.2 ... – troig

+0

È davvero strano. A volte funziona, a volte riporta errori –

risposta

6

In realtà, la chiave di questo problema è che $scope.map.control.refresh non deve essere utilizzato prima che la mappa sia stata caricata completamente. Se la mappa è inizialmente nascondere, allora io chiamo una funzione come questa

function refreshMap() { 
    //show map action 
    $scope.map.showMap = true; 
    //refresh map action 
    $scope.map.control.refresh({latitude: 48,longitude: 2.3}); 
} 

La funzione refreshMap chiamerà la mostra mappa l'azione e aggiornare mappa un'azione allo stesso tempo. Significa che la mappa non è completamente caricata quando chiamo la funzione $ scope.map.control.refresh. Quindi, riporterà lo TypeError: $scope.map.control.refresh is not a function.

Un metodo è utilizzare uiGmapIsReady per rilevare se la mappa è pronta per l'uso.

function refreshMap() { 
    //show map action 
    $scope.map.showMap = true; 

    //refresh map action 
    uiGmapIsReady.promise() 
     .then(function (map_instances) { 
      $scope.map.control.refresh({latitude: 48,longitude: 2.3}); 
     }); 
} 

Questo JSFiddle uso uiGmapIsReady per risolvere questo problema.

Il secondo metodo è utilizzare $timeout per ritardare l'azione di aggiornamento.

function refreshMap() { 
    //show map action 
    $scope.map.showMap = true; 

    //delayed refresh map action 
    $timeout(function(){ 
     $scope.map.control.refresh({latitude: 48,longitude: 2.3}); 
    },3000); 
} 

Questo JSFiddle utilizza $timeout per risolvere questo problema.

Problemi correlati