【问题标题】:Markers not appearing in leaflet传单中未出现标记
【发布时间】:2015-05-15 19:06:51
【问题描述】:

我正在尝试从数据库加载位置并将其分配给标记(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);

【问题讨论】:

    标签: angularjs leaflet markers angular-leaflet-directive


    【解决方案1】:

    尝试使用$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()方法,这是另一种解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多