如何为每个从数据库获取用户的标记?

时间:2019-06-26 18:43:44

标签: javascript laravel google-maps

我有一个可与Google地图配合使用的Laravel项目。我有一个包含以下两个字段的用户模型:纬度,经度。我想为每个用户创建一个带有InfoWindow的标记。

这是我的代码:

web.php:

Route::get('/',function (){
    $users = \App\User::all() ;
    return view('map',compact(['users']));
}) ;

map.blade.php:

<script>
        var map ;
        function initMap() {

            map = new google.maps.Map(document.getElementById('map'), {
                center: {lat: -23, lng: 150.644},
                zoom: 8
            });

            @forEach($users as $user)

                var lat = parseFloat({{$user->lat}});
                var lng = parseFloat({{$user->long}});

                var content = "{{$user->name}}" ;
                var infoWindow = new google.maps.InfoWindow(
                    {
                        content:content
                    }
                );

                var urlurl = {lat:lat,lng:lng} ;
                var marker = new google.maps.Marker(
                    {
                        position:urlurl ,
                        map:map
                    }
                ) ;

                marker.addListener('click',function () {
                    infoWindow.open(map,marker);
                });

            @endforeach
        }
    </script>

但是当我运行它时,它只会显示最后一个用户插入的标记。

如何为每个用户准确地制作一个标记?

1 个答案:

答案 0 :(得分:0)

尝试使用闭包

<script>
    var map ;
    function addMyListener(aMarker, aInfoWindow){

            aMarker.addListener('click',function () {
                // Change marker to aMarker
                aInfoWindow.open(map,aMarker);
            });

    }

    function initMap() {

        map = new google.maps.Map(document.getElementById('map'), {
            center: {lat: -23, lng: 150.644},
            zoom: 8
        });

        @forEach($users as $user)

            var lat = parseFloat({{$user->lat}});
            var lng = parseFloat({{$user->long}});

            var content = "{{$user->name}}" ;
            var infoWindow = new google.maps.InfoWindow(
                {
                    content:content
                }
            );

            var urlurl = {lat:lat,lng:lng} ;
            var marker = new google.maps.Marker(
                {
                    position:urlurl ,
                    map:map
                }
            ) ;

            addMyListener(marker, infowindow);

        @endforeach
    }
</script>