首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为离子标记创建多个信息流

为离子标记创建多个信息流
EN

Stack Overflow用户
提问于 2015-08-03 19:49:44
回答 1查看 829关注 0票数 0

我使用谷歌地图在我的应用程序中显示某些用户的位置作为标记。在一个图片,然后我显示一个简短的个人资料,他们的用户名和链接到他们的个人资料在我的平台上。然而,目前,每个广告中的内容都是相同的。有人能帮忙吗?我对角js和离子非常陌生,而且我知道我的代码相当草率。现在,虽然我只需要它的工作,优雅和性能/效率将在稍后出现。

代码语言:javascript
复制
.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)
    }
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-03 20:04:41

问题是,您只创建了一个InfoWindow实例,在代码中,它就在map变量行的下面。本质上,只有一个InfoWindow存在,因此只能存储一组内容。您在不同的坐标下重用同一个infowindow实例,因此它们都具有相同的内容。

这可以通过简单地在由InfoWindow循环调用的函数中创建一个新的for来解决。

代码语言:javascript
复制
    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);
        });
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31795600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档