当我显示/隐藏谷歌地图时,它仅显示为左上角的小框。我看过其他解决方案,他们说要放一个

        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 终止之前),并且我遇到了同样的问题。

这没有效果...唯一绘制的框架是左上角