我使用谷歌地图在我的应用程序中显示某些用户的位置作为标记。在一个图片,然后我显示一个简短的个人资料,他们的用户名和链接到他们的个人资料在我的平台上。然而,目前,每个广告中的内容都是相同的。有人能帮忙吗?我对角js和离子非常陌生,而且我知道我的代码相当草率。现在,虽然我只需要它的工作,优雅和性能/效率将在稍后出现。
.controller('MapviewCtrl', function($scope, $cordovaGeolocation, $ionicLoading, $ionicPlatform, $compile) {
$ionicPlatform.ready(function () {
$ionicLoading.show({
template: '<ion-spinner icon="bubbles"></ion-spinner><br/>Acquiring location!'
});
var posOptions = {
enableHighAccuracy: true,
timeout: 20000,
maximumAge: 0
};
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
var lat = position.coords.latitude;
var long = position.coords.longitude;
console.log("Current Latitude and Longitude",lat,long)
var myLatlng = new google.maps.LatLng(lat, long);
var mapOptions = {
center: myLatlng,
zoom: 14,
maxZoom:14,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
//
function downloadUrl(url,callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState === 4) {
//request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
$scope.markers = [];
var url = "xmlprovider"
downloadUrl(url,function(data){
var xml=data.responseXML;
console.log("XML From Server: ", xml);
var markers = xml.getElementsByTagName("marker");
var userSports = window.localStorage.getItem("listOfUserActivities");
for (var i=0; i<markers.length; i++){
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lon")));
var sportsArr = markers[i].getAttribute("sports");
$scope.chatToUserID = markers[i].getAttribute("userID");
for (var s=0; s<sportsArr.length; s++) {
if (userSports.indexOf(sportsArr[s]) > -1) {
$scope.user = markers[i].getAttribute("user");
var html = '<div><h3 style="color:#387EF5">'+markers[i].getAttribute("user")+'</h3><h4 style="color:#387EF5">'+markers[i].getAttribute("bio")+'</h4><br><a data="'+$scope.user+'" href="/#/app/userProfile/'+$scope.user+'/'+$scope.chatToUserID+'/'+markers[i].getAttribute("bio")+'">View Profile</a></div>'
var html = $compile(html)($scope);
var marker = new google.maps.Marker({
map: $scope.map,
position: point,
});
$scope.markers.push(marker);
bindInfoWindow(marker, map, html);
}
}
}
});
function bindInfoWindow(marker, map, html) {
var infoWindow = new google.maps.InfoWindow({});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.content=html[0].innerHTML;
infoWindow.open(map, marker);
console.log(html)
window.localStorage.setItem("html",html);
});
}
$scope.map = map;
$ionicLoading.hide();
}, function (err) {
$ionicLoading.hide();
console.log(err)
});
})
$scope.chatToUser = function(user){
console.log(user)
var url = "app.profile/"+$scope.chatToUser
$state.go(url)
}
})发布于 2015-08-03 20:04:41
问题是,您只创建了一个InfoWindow实例,在代码中,它就在map变量行的下面。本质上,只有一个InfoWindow存在,因此只能存储一组内容。您在不同的坐标下重用同一个infowindow实例,因此它们都具有相同的内容。
这可以通过简单地在由InfoWindow循环调用的函数中创建一个新的for来解决。
function bindInfoWindow(marker, map, infoWindow) {
var infowindow = new google.maps.InfoWindow({});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.content=marker.html[0];
infoWindow.open(map, marker);
console.log(html)
window.localStorage.setItem("html",html);
});
}https://stackoverflow.com/questions/31795600
复制相似问题