2015-03-13 67 views
1

我試圖從數據庫中加載位置並將其分配給標記(lat,lng)。但是當我將新標記推送到我的標記數組中時,標記不會出現在傳單地圖上。標記未出現在小冊子中

我正在創建這樣的標記。

$scope.markers = new Array(); 

$scope.alerts = Alert.query(function(){ 
     $scope.markers.push({ 
      lat: $scope.alerts[0].g_pos.coordinates[0], 
      lng: $scope.alerts[0].g_pos.coordinates[1], 
      message: "Added marker from query" 
     }); 
     console.log($scope.markers[0].lat); 
     console.log($scope.markers[0].lng); 
    }); 

我能夠在控制檯中看到具有正確值的marker.lat和marker.lng。它只是沒有出現在傳單地圖中。

我也嘗試使用watchCollection(),但沒有運氣。

$scope.$watch('markers', function(newMarkers, oldMarkers) { 
     if (newMarkers.length > 0) { 
      console.log(newMarkers[0].lat); 
      console.log(newMarkers[0].lng); 
     }   
    }, true); 

回答

0

試着用$timeout包裝你的代碼。通過這種方式,AngularJS將知道您的更改。

$scope.markers = new Array(); 

$scope.alerts = Alert.query(function(){ 
    $timeout(function() { 
     $scope.markers.push({ 
      lat: $scope.alerts[0].g_pos.coordinates[0], 
      lng: $scope.alerts[0].g_pos.coordinates[1], 
      message: "Added marker from query" 
     }); 
     console.log($scope.markers[0].lat); 
     console.log($scope.markers[0].lng); 
    }); 
}); 

注:你應該inject$timeout服務到您的控制器。

這是關於此問題SO thread

另外這裏是an article,其中作者談到了$apply()方法,這是另一種解決方案。

相關問題