【发布时间】:2016-10-30 19:22:46
【问题描述】:
我正在创建一个指令来显示 Google Maps API。
指令:
.directive('googleMaps', ["$cordovaGeolocation", function($cordovaGeolocation){
return {
restrict: 'E',
scope: {},
link: function($scope, element, attrs) {
var options = {
timeout: 10000,
enableHighAccuracy: true
};
$cordovaGeolocation.getCurrentPosition(options).then(function(position){
var latitude = position.coords.latitude,
longitude = position.coords.longitude;
var latLng = new google.maps.LatLng(latitude, longitude);
var mapOptions = {
center: latLng,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(this, mapOptions);
}).catch(function(error) {
console.log(error);
});
}
}
}]);
按照非常简单的教程(主要的教程是here)我创建了它。
在 google.maps.Map(...) 方法中,您会注意到它接受 2 个参数。
在教程中,这是您放置地图的 HTML 元素。
我想,既然使用了指令和restrict: 'E',我可以将this 作为参数传递。
所以我的问题是:
- 我这样想对吗?
- 还有其他方法吗? (我知道
document.getElementById("google-maps")) -
this在 Angular 指令中实际指的是什么?
注意:调试时this返回Window的实例
编辑:已尝试document.getElementsByTagName("google-maps"),但它甚至不起作用
【问题讨论】:
-
由于
this没有定义执行上下文,在浏览器中它将是window。将this替换为element[0]。更多关于this作用域 - developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 和谷歌地图文档说google.maps.Map构造函数采用 HTML 元素对象 - developers.google.com/maps/documentation/javascript/reference -
当有几个不同的谷歌地图角度模块已经可用并记录以及示例时,为什么要重新发明轮子
-
@charlietfl 我考虑过它们,但是,我没有编写原始代码,只是在做一些调整后的代码审查
标签: angularjs google-maps