javascript - 单击时显示谷歌地图不加载

标签 javascript jquery html angularjs google-maps

我的谷歌地图是隐藏的,当我点击上一个按钮时,它会使用 ng-show 显示。问题是它不加载/初始化。它只是保持灰色。我试过 "resize" 但什么也没做。我试过使用 onclick="displayMap()" 并使用 display none/block 但它也不起作用。没有控制台错误。

最佳答案

这是一个已知问题(参见示例 here),一旦父 div display 样式设置为 none, map 大小就无法正确确定。两者 ng-hide/ng-show指令通过操纵显示样式隐藏/显示给定元素。

一个解决方案是将 ng-show 替换为 ng-class/ng-style控制 map 可见性的指令如下所示:

angular.module('myApp', [])
    .controller('MapCtrl', [
        '$scope', function ($scope) {

            $scope.mapIsVisible = false;


            $scope.toggleMap = function(){
                $scope.mapIsVisible = !$scope.mapIsVisible;
            };


            $scope.initMap = function () {
                var center = new google.maps.LatLng(-33.870501, 151.206704);
                var mapOptions = {
                    zoom: 12,
                    center: center,
                    mapTypeId: google.maps.MapTypeId.TERRAIN
                };
                $scope.map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
             
            }
            google.maps.event.addDomListener(window, 'load', $scope.initMap);
        }]);
 #map-canvas {
            width: 500px;
            height: 500px;
 }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<script src="https://maps.google.com/maps/api/js"></script>
<script src="script.js"></script>



  <div ng-app="myApp">
        <div ng-controller="MapCtrl">
            <button ng-click="toggleMap()">Toggle map</button>
            <div ng-style="{'visibility': mapIsVisible ? 'visible':'hidden'}">
                <div id="map-canvas"></div>
            </div>
        </div>
</div>

关于javascript - 单击时显示谷歌地图不加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47035686/

相关文章:

javascript - 映射 Json 数组值

javascript - 处理多个图像的图像加载功能

html - 下拉菜单项将其他元素移动到右侧

javascript - 将变量传递给 React 组件会得到 "unknown property errror"

javascript - ng-select 不发送字段的 id

javascript - 解压 JavaScript (p,a,c,k,e,d) 函数

jquery - 如何在 jquery masterslider 中添加 youtube 和 vimeo 视频作为背景

jquery - 如何设置背景图像离开前景图像的不透明度?

javascript - 堆栈交换站点列表页面中的框重排算法

html - 行内 block 元素和垂直对齐推理