angular谷歌地图:如何在ui gmap标记中获取当前模型
angular-google-maps: how to get current model in ui-gmap-markers
我正在尝试为每个标记加载图标。每个标记的图标都不同。
我有一个函数"getIcon",它需要来自每个绑定模型(item.uid)的uid
如果我将"this"传递给getIcon,它是未定义的。
似乎没有办法找到当前的型号。
我将不得不在这里使用"ui-gmap标记"而不是"ui-gmap-marker"
这个选项真的很奇怪。
<ui-gmap-markers models="items" idkey="'Uid'"
options="{icon: getIcon(this, map.zoom)}"
coords="'self'" icon="'icon'">
</ui-gmap-markers>
在本例中,this
指的是ui-gmap-markers
指令隔离的作用域,模型属性不可访问,因为它属于子作用域。
您可以考虑以下方法来绑定基于地图缩放的图标标记。
首先,让我们介绍每个缩放级别的图标阵列:
$scope.zoomIcons = {};
var althabet = "abcdefghijklmnopqrstuvwxyz".toUpperCase().split("");
var l = 0;
althabet.forEach(function(ch){
$scope.zoomIcons[l] = 'http://www.google.com/mapfiles/marker' + ch + '.png';
l++;
});
然后让我们使用icon
指令属性指定标记图标:
<ui-gmap-markers models="items" idkey="'Uid'" coords="'self'" icon="'icon'">
</ui-gmap-markers>
其中icon
属性和其他属性将针对每个标记进行初始化(有关更多详细信息,请参见下面的示例)
最后一步是在地图缩放更改后更新标记图标,如下所示:
$scope.$watch(function () { return $scope.map.zoom; }, function (newZoom, oldZoom) {
if(newZoom != oldZoom){
console.log('Zoom:' + newZoom + ':' + oldZoom);
$scope.items.forEach(function(item){
item.icon = $scope.getIcon(newZoom);
});
}
}, true);
工作示例
var appMaps = angular.module('appMaps', ['uiGmapgoogle-maps']);
appMaps.controller('mainCtrl', function($scope) {
$scope.map = {
center: { latitude: 40.1451, longitude: -99.6680 },
zoom: 4,
options: { scrollwheel: false }
};
$scope.zoomIcons = {};
var althabet = "abcdefghijklmnopqrstuvwxyz".toUpperCase().split("");
var l = 0;
althabet.forEach(function(ch){
$scope.zoomIcons[l] = 'http://www.google.com/mapfiles/marker' + ch + '.png';
l++;
});
var getRandomLat = function() {
return Math.random() * (180.0) - 90.0;
};
var getRandomLng = function () {
return Math.random() * (360.0) - 180.0;
};
var createRandomMarker = function(i) {
var item = {
latitude: getRandomLat(),
longitude: getRandomLng(),
title: '#' + i,
show: true,
Uid: i,
icon: $scope.getIcon($scope.map.zoom)
};
return item;
};
$scope.getIcon = function(zoom) {
return { url: $scope.zoomIcons[zoom] };
};
$scope.items = [];
for (var i = 0; i < 160; i++) {
$scope.items.push(createRandomMarker(i));
}
$scope.$watch(function () { return $scope.map.zoom; }, function (newZoom, oldZoom) {
if(newZoom != oldZoom){
console.log('Zoom:' + newZoom + ':' + oldZoom);
$scope.items.forEach(function(item){
item.icon = $scope.getIcon(newZoom);
});
}
}, true);
});
html, body, #map_canvas {
height: 100%;
width: 100%;
margin: 0px;
}
#map_canvas {
position: relative;
}
.angular-google-map-container {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
}
<script src="https://code.angularjs.org/1.3.14/angular.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
<script src="http://rawgit.com/angular-ui/angular-google-maps/2.0.X/dist/angular-google-maps.js"></script>
<div id="map_canvas" ng-app="appMaps" ng-controller="mainCtrl">
<ui-gmap-google-map center="map.center" zoom="map.zoom" options="map.options" events="map.events">
<ui-gmap-markers models="items" idkey="'Uid'"
coords="'self'" icon="'icon'" >
</ui-gmap-markers>
</ui-gmap-google-map>
</div>
相关文章:
- 如何使用backbone.js从集合中获取模型名称
- Django 使用 JSON 获取模型方法的值
- 在Waterline中动态定义和获取模型
- 在Backbone中通过CID设置和获取模型
- 从Ember视图获取模型属性
- 在不同的模型中获取模型id会在主干中创建表单
- 余烬需要刷新浏览器才能获取模型数据
- Ember.js:使用模型实例的路由获取模型实例的 url 字符串
- 主干视图在模型完成提取后获取模型变量
- 有没有办法轻松获取 C# 模型的 JavaScript 表示形式
- 角度形式 - 从包装器中的字段获取模型
- 如何在获取操作后获取模型属性
- 从 JSON.file 获取模型并将其存储在本地存储主干
- 如何从主干中的嵌套 json 对象获取模型属性
- 在单独的Javascript文件中获取模型值
- 如何获取模型的哪个特定属性已更改?这在Backbone.js中可能吗
- 如何按id从集合中获取模型
- 在ExtJS中从GridPanel获取模型
- 如何获取模型内部的组件引用保存回调函数
- Ember.js渲染模板在其他模板中没有获取模型