我正在尝试从数据库加载位置并将其分配给marker(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 :(得分: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()
方法,这是另一种方法。