如何刷新角度 ui-map (google-map)
Posted
技术标签:
【中文标题】如何刷新角度 ui-map (google-map)【英文标题】:How to refresh an angular ui-map (google-map) 【发布时间】:2013-12-15 07:53:29 【问题描述】:我最初使用 ng-hide 隐藏地图。当 ng-hide-expression 计算结果为 true 时,地图未正确显示。它仅部分显示,拖动时的行为也很奇怪。 当我删除 ng-show 属性时,地图会正确显示。
html:
<div ng-controller="MapCtrl">
<button ng-click="showMap()">Show map</button>
<div ng-show="showMapVar">
<div ng-repeat="marker in myMarkers" ui-map-marker="myMarkers[$index]"
ui-event="">
</div>
<div id="map_canvas" ui-map="myMap" style="height:200px;width:300px"
ui-event="" ui-options="mapOptions">
</div>
</div>
</div>
angular.module('doc.ui-map', ['ui.map'])
.controller('MapCtrl', ['$scope', function ($scope)
$scope.myMarkers = [];
$scope.mapOptions =
center: new google.maps.LatLng(35.784, -78.670),
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
$scope.showMap = function()
$scope.showMapVar = true;
]) ;
【问题讨论】:
我自己没有使用过ui-map
,但我怀疑问题出在显示地图时元素的width
/height
计算不正确。尝试使用 ng-if
(在 Angular 1.2 上)或 ng-switch
(在旧版本上)来完全删除并重新创建 DOM,看看它是否能解决问题。
谢谢你,musicly_ut,使用 ng-if 做到了。
看来答案解决了问题。请将其标记为已接受,以便其他用户更清楚。 :)
【参考方案1】:
当对象不应该可见时,使用ng-show
只是将display
属性设置为none
。这与height
/width
的计算相混淆。
另一方面,ng-if
(Angular 1.2) 删除并重新创建 DOM,强制重新计算 height
/width
。这应该可以解决问题。
【讨论】:
我发现我可以在showMap()
中使用类似$timeout().then(function()$scope.control.refresh();)
的东西,但是标记不会重绘。 ng-if
解决了这两个问题【参考方案2】:
我的谷歌地图在一个隐藏的标签中,这个解决方案对我有用, 假设您已使用 $scope.map 初始化并引用了您的地图:
<div id="googleMap" style="height:600px;" ng-show="resizeMap()"></div>
在您的控制器中:
$scope.resizeMap = function()
google.maps.event.trigger($scope.map, 'resize');
$scope.map.setCenter(0);
【讨论】:
【参考方案3】:https://github.com/allenhwkim/angularjs-google-maps/issues/15 说
这是因为地图初始化为隐藏状态。所以地图的大小是它的最小宽度和高度,尽管容器更大
http://plnkr.co/edit/zLl2pJEnLzcq1rm07hLq?p=preview
正如您在 plunkr 上看到的,当地图在可见 DOM 上初始化时,它具有适当的大小。 这就是区别。
如果您想在初始状态下隐藏地图,我建议您在地图显示后重新绘制地图。这可能会有所帮助,How do I force redraw with Google Maps API v3.0?
这帮我解决了
【讨论】:
以上是关于如何刷新角度 ui-map (google-map)的主要内容,如果未能解决你的问题,请参考以下文章
如何仅刷新组件的一部分而不刷新 ngOnInIt() 角度?