i've got issue using gmap , angular first, let me explain issue :
- my markers correctly set on map
- when click on marker want push $scope.details array use in view (see below)
- basically, i'm coding own infowindow display partners details on sidebar on right (instead of displaying on map)
- my problem whenever click on marker, it's pushing $scope.details last index in loop
now, let me share code :
map initialization (centered on france fyi):
var map = null, markers = []; $scope.details = []; function initializemap() { var mapoptions = { center: { lat: 46.52863469527167, lng: 2.43896484375}, zoom: 5 }; map = new google.maps.map(document.getelementbyid('map-canvas'), mapoptions); setmarkers(map, partners); } partners info placed on map
var partners = [ { 'title' : 'partenaire 1', 'lat' : 46.52863469527167, 'lng' : 2.43896484375, 'type' : 'distributeur' }, { 'title' : 'partenaire 2', 'lat' : 47.52863469527167, 'lng' : 3.43896484375, 'type' : 'fabricant' }, { 'title' : 'partenaire 3', 'lat' : 46, 'lng' : 5, 'type' : 'fabricant' } ]; setting markers on map
function setmarkers(map, locations) { (var in locations) { // looping through given locations (ie through partners array) var location = locations[i]; var mylatlng = new google.maps.latlng(location.lat, location.lng); var marker = new google.maps.marker({ position: mylatlng, map: map, title: location.title }); markers.push(marker); // pushing markers in own array later purpose marker.setmap(map); // setting marker on map google.maps.event.addlistener(marker, 'click', function() { // adding click listener on marker $scope.details.push(location); // pushing clicked marker details // line above pushing last index in loop $scope.$apply(); // applying changes (needed in case) }); } }; view code :
<div class="row"> <div class="col-md-9"> <div style="height:500px; width: 100%; position: relative"> <div id="map-canvas"></div> </div> </div> <div class="col-md-3"> <pre>{{details}}</pre> <div class="well" ng-repeat="d in details track $index"> <span class="glyphicon glyphicon-remove" ng-click="removedetail($index)"></span> <p>{{d.title}}</p> <button class="btn btn-default" ng-click="localize(details[$index])">localiser</button> </div> </div> </div> i can't find whatever i'm doing wrong , hope guys me ! many in advance.
ps : don't expect fast answer me since i'll away few days
your problem here:
for (var in locations) { // looping through given locations (ie through partners array) var location = locations[i]; ... google.maps.event.addlistener(marker, 'click', function() { $scope.details.push(location); }); } you loop on markers, updating variable called location. each marker has own event listener, uses location... that's not version created inside loop @ every iteration, it's whatever location when user clicks marker, i.e. value has @ end of loop.
one quick fix here add location custom property each marker, can refer in event listener, e.g.
var marker = new google.maps.marker({ position: mylatlng, map: map, title: location.title, location: location }); google.maps.event.addlistener(marker, 'click', function() { $scope.details.push(this.location); });
Comments
Post a Comment