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);
4

1 回答 1

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 线程

另外here是一篇文章,作者在其中讨论了该$apply()方法,这是另一种解决方案。

于 2015-03-13T10:35:46.127 回答