【发布时间】:2016-11-28 01:47:57
【问题描述】:
到目前为止,我必须在我的网站上显示带有标记的地图,这些标记取决于 JSON 文件中指定的不同对象的纬度和经度。这些标记可以通过选择标签进行过滤,该标签显示在这些 JSON 对象中找到的不同类别。
我一直在使用 ui-gmap-marker (ng-repeat),但在这里我发现我最好使用 ui-gmap-markers。事情是我一直在尝试实现它,但我无法应用我在选择标签中得到的过滤器(模型中的过滤器=“”给出很多错误!)此外,infoWindows 不显示信息我得到了 JSON 文件(我之前通过 ng-repeat 得到的)。
我一直在尝试从这里工作:http://embed.plnkr.co/f2gxG7DM1U8IlOXfRiuT/
<div ng-controller="loadMapController">
<select id="dropdown" ng-model="categoryOrder">
<option value="0">All</option>
<option ng-repeat="category in categories" value="{{category}}">{{category}}</option>
</select>
<ui-gmap-google-map center='map.center' zoom='map.zoom' aria-label="Google map" pan="true">
<ui-gmap-markers models="map.markers" idKey="'id'" coords="'self'" events="map.markersEvents">
<ui-gmap-window show="map.window.show" coords="map.window.model" ng-cloak>
<div>
<p><img ng-src="{{image}}" alt="{{name}}" style="width: 200px; height: 150px; border-radius: 5px;"></p>
<p><strong>{{name}}</strong></p>
<p>{{address}}</p>
<p><a ng-href="{{website}}">Website</a></p>
<p><span class="glyphicon glyphicon-plus"> </span><a href="#/"> Profile</a></p>
</div>
</ui-gmap-window>
</ui-gmap-markers>
</ui-gmap-google-map>
<ul>
<li ng-repeat="location in locations | filter:categoryOrder" ng-class="{selected: location == map.window.model}" ng-click="map.window.model = location">
<p>{{location.name}}</p>
</li>
</ul>
</div>
.controller('loadMapController', ['$scope', '$http', function($scope, $http){
$http.get ("json/map_data.json").success(function(data) {
$scope.locations = data;
var category = [];
for (var i = 0; i < data.length; i++){
category[i] = data[i].category;
};
var sorted_categories = category.sort();
$scope.categories = [];
for (var i = 0; i < category.length; i++){
if (sorted_categories[i+1] != sorted_categories[i]){
$scope.categories.push(sorted_categories[i]);
}
};
$scope.map.markers = data;
console.log($scope.map.markers);
})
$scope.map = {
center: {
latitude: 37.395400,
longitude: -5.984930
},
zoom: 12,
window: {
model: {},
show: false,
options:{
pixelOffset: {width:-1,height:-20}
}
},
markers: [],
markersEvents: {
click: function(marker, eventName, model, args) {
$scope.map.window.model = model;
$scope.map.window.show = true;
}
}
};
}]);
【问题讨论】:
-
我正在尝试的另一种选择是基于:
<ui-gmap-marker ng-repeat="marker in locations | filter:categoryOrder" coords="{latitude: marker.latitude, longitude: marker.longitude}" options="marker.options" events="map.markersEvents" idkey="marker.id" > <ui-gmap-window> <div> <p><img ng-src="{{marker.image}}" alt="{{marker.name}}" </p> <p><strong>{{marker.name}}</strong></p> <p>{{marker.address}}</p> <p><a ng-href="{{marker.website}}">Website</a></p> </div> </ui-gmap-window> </ui-gmap-marker>使用 ng-click,例如 ng-click="map.window.model = location"。
标签: javascript angularjs google-maps google-maps-markers angular-google-maps