当我显示/隐藏谷歌地图时,它仅显示为左上角的小框。我看过其他解决方案,他们说要放一个
google.maps.event.addListenerOnce(map, "idle", function() {
google.maps.event.trigger(map, "resize");
});
函数到我的地图上,因此当我显示它时,会触发调整大小事件。
当我加载网页时,出现以下错误:
TypeError: Cannot read property '__e3_' of undefined
at $e (https://maps.gstatic.com/maps-api-v3/api/js/20/10/main.js:17:1614)
at new Ye (https://maps.gstatic.com/maps-api-v3/api/js/20/10/main.js:20:321)
at Object.S.addListener (https://maps.gstatic.com/maps-api-v3/api/js/20/10/main.js:17:1332)
at Object.S.addListenerOnce (https://maps.gstatic.com/maps-api-v3/api/js/20/10/main.js:19:321)
at linkFunction (http://localhost:3000/ffprototype.js?30b6906416281b1680ca5206c9cc5612b1a78d83:47:23)
at invokeLinkFn (http://localhost:3000/packages/angular_angular.js?9db7e8edebe9ba02ab378f03d9a52d49148583ee:8288:9)
at nodeLinkFn (http://localhost:3000/packages/angular_angular.js?9db7e8edebe9ba02ab378f03d9a52d49148583ee:7798:11)
at compositeLinkFn (http://localhost:3000/packages/angular_angular.js?9db7e8edebe9ba02ab378f03d9a52d49148583ee:7147:13)
at nodeLinkFn (http://localhost:3000/packages/angular_angular.js?9db7e8edebe9ba02ab378f03d9a52d49148583ee:7793:24)
at compositeLinkFn (http://localhost:3000/packages/angular_angular.js?9db7e8edebe9ba02ab378f03d9a52d49148583ee:7147:13)
我的指令如下:
app.directive('addressBasedGoogleMap', function() {
var map
var linkFunction = function(scope, element, attrs) {
var googleAddress = scope.$eval(attrs.address);
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': googleAddress}, function (results, status){
if (status == google.maps.GeocoderStatus.OK) {
var mapOptions = { zoom: 16, center:results[0].geometry.location, mapTypeId:google.maps.MapTypeId.ROADMAP}
map = new google.maps.Map(element[0], mapOptions);
var marker1 = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
title: googleAddress
});
}
else{
alert(status)
}
})
};
google.maps.event.addDomListener(window, "resize", function() {
var center = map.getCenter();
google.maps.event.trigger(map, "resize");
map.setCenter(center);
});
google.maps.event.addListenerOnce(map, "idle", function() {
google.maps.event.trigger(map, "resize");
});
return {
link: linkFunction
};
});
我还尝试在链接函数中移动事件侦听器,但这也不起作用。
看来您map
在定义它之前尝试使用它。地理编码器不会立即发生,因此当您addListenerOnce
触发时,map
尚未定义。
您也许可以像这样重新组织:
app.directive('addressBasedGoogleMap', function() {
var map
var linkFunction = function(scope, element, attrs) {
var googleAddress = scope.$eval(attrs.address);
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': googleAddress}, function (results, status){
if (status == google.maps.GeocoderStatus.OK) {
var mapOptions = { zoom: 16, center:results[0].geometry.location, mapTypeId:google.maps.MapTypeId.ROADMAP}
map = new google.maps.Map(element[0], mapOptions);
var marker1 = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
title: googleAddress
});
google.maps.event.addListenerOnce(map, "idle", function() {
google.maps.event.trigger(map, "resize");
});
} else {
alert(status)
}
})
};
google.maps.event.addDomListener(window, "resize", function() {
var center = map.getCenter();
google.maps.event.trigger(map, "resize");
map.setCenter(center);
});
return {
link: linkFunction
};
});
这样,一旦您知道地理编码器返回后正确定义了地图,您就可以设置侦听器。
我现在正在工作,还没有在那里尝试过,但我确实尝试将其放在 geocoder.geocode 块之后(就在 linkFunction 终止之前),并且我遇到了同样的问题。
这没有效果...唯一绘制的框架是左上角