我有以下 HTML 代码:
<section data-ng-controller="NearbyController" ng-init="getUserLocation()">
<!-- spinner while map is loading -->
<span us-spinner spinner-key="spinner-1" spinner-start-active="true"></span>
<div class="left-half-container">
<ui-gmap-google-map center="map.center" zoom="map.zoom" draggable="true" options="options">
<!-- marker to show current user location -->
<ui-gmap-marker coords="marker.coords" options="marker.options" idkey="marker.id">
<ui-gmap-window show="true" closeClick="closeClick()">
</ui-gmap-window>
</ui-gmap-marker>
<ui-gmap-window ng-repeat="marker in allMarkers" show="marker.showWindow" options="marker.infoWindow" coords="marker.coords">
</ui-gmap-window>
<ui-gmap-markers models="allMarkers" coords="'coords'" options="'options'" icon="'icon'" click="'onClick'">
</ui-gmap-markers>
</ui-gmap-google-map>
</div>
</section>
这是来自控制器的相关代码(我认为):
// pushing breweries data from $http request and place markers
var handleSuccess = function(data, status){
if (data.data){
$scope.breweries = data.data;
placeMarker();
}
usSpinnerService.stop('spinner-1'); //stop the spinner
};
var createMarker = function (i) {
var name = $scope.breweries[i].brewery.name;
var addr = ($scope.breweries[i].streetAddress !== undefined) ? $scope.breweries[i].streetAddress + '<br>' : '';
var phone = ($scope.breweries[i].phone !== undefined) ? $scope.breweries[i].phone + '<br>' : '';
var id = $scope.breweries[i].brewery.id;
var dist = $scope.breweries[i].distance + ' miles away<br>';
var desc = '<div class="info-window"><a href="#!/brewery/' + id + '"><strong>' +
name + '</strong></a><br>' + dist + addr + phone + '</div>';
var ret = {
id: i,
coords : {
latitude: $scope.breweries[i].latitude,
longitude: $scope.breweries[i].longitude,
},
options: {
title: name,
},
infoWindow: {
content: desc
},
icon: '/modules/nearby/images/beer-icon.png',
showWindow: false
};
ret.onClick = function() {
if ($scope.oldWindow > -1) {
$scope.allMarkers[$scope.oldWindow].showWindow = false;
}
$scope.oldWindow = ret.id;
ret.showWindow = !ret.showWindow;
};
return ret;
};
// create markers for all breweries
var placeMarker = function() { // places all the brewery markers
var markers = [];
for (var i = 0; i < $scope.breweries.length; i++) {
markers.push(createMarker(i));
}
$scope.allMarkers = markers;
};
$scope.getUserLocation = function(){
// function to access users geolocation coordinates, draw map and place markers
geolocation.getLocation().then(function(data){
$scope.coords = {lat:data.coords.latitude, long:data.coords.longitude};
uiGmapGoogleMapApi.then(function(maps) {
$scope.map = { center: { latitude: $scope.coords.lat, longitude: $scope.coords.long }, zoom: 12};
$scope.windowOptions = {
visible: true
};
curLocationMarker(); // add marker for current location
Breweries.getData($scope.coords).success(handleSuccess); // get brewery data from factory
});
});
};
这一切都适用于以下设备:Windows 桌面、Macbook Air、Windows 手机和 Android 手机。问题出在 iPad 和 iPhone 上的 Safari 浏览器上(iPad 和 iPhone 上的 Chrome 浏览器有效!)。首次访问地图时,仅显示地图,没有当前位置标记或啤酒厂标记。如果您在浏览器中返回然后再次前进,则可以显示当前位置标记,但仍然没有啤酒厂标记!
我已经花了几天的时间试图解决它,但我无法弄清楚。我运行的是 Windows 7 设置,所以我无法使用 Web Inspector 连接到 safari 浏览器,而且我试过 weinre 无济于事。
您可以在实时站点上亲自查看:ontappapp.azurewebsites.net 并转到菜单中的“附近”或“发现附近的啤酒厂”。谢谢!