angular-google-maps TypeError: $scope.map.control.refresh 不是函数
Posted
技术标签:
【中文标题】angular-google-maps TypeError: $scope.map.control.refresh 不是函数【英文标题】:angular-google-maps TypeError: $scope.map.control.refresh is not a function 【发布时间】:2016-08-10 18:58:37 【问题描述】:我在我的 cordova 移动应用程序中集成了 angular-google-maps。我想使用以下函数刷新地图。
function refreshMap()
$scope.map.control.refresh(
latitude: $scope.location.T_Lat_Deg_W.value,
longitude: $scope.location.T_Long_Deg_W.value
)
但出现错误
angular.js:13540 TypeError: $scope.map.control.refresh 不是 功能
at Scope.refreshMap (mapController.js:122)
at fn (eval at <anonymous> (angular.js:1), <anonymous>:4:224)
at expensiveCheckFn (angular.js:15475)
at callback (angular.js:25008)
at Scope.$eval (angular.js:17219)
at Scope.$apply (angular.js:17319)
at htmlAnchorElement.<anonymous> (angular.js:25013)
at defaultHandlerWrapper (angular.js:3456)
at HTMLAnchorElement.eventHandler (angular.js:3444)
这里是这个问题的JSFiddle example。
有没有办法解决这个问题?谢谢!
【问题讨论】:
你能再显示一些代码吗?你的整个控制器和你的地图标签? 自从我升级到 Angular 1.5 和 angular-google-maps 2.3.2... 真的很奇怪。有时有效,有时报错 你能把你的代码放在一个 plunkr 或其他东西中,这样更容易判断问题是什么 看来您需要等到地图加载完毕才能调用该函数。 【参考方案1】:其实这个问题的关键是在地图完全加载之前不要使用$scope.map.control.refresh
。如果地图最初是隐藏的,那么我会调用这样的函数
function refreshMap()
//show map action
$scope.map.showMap = true;
//refresh map action
$scope.map.control.refresh(latitude: 48,longitude: 2.3);
refreshMap
函数会同时调用显示地图动作和刷新地图动作。这意味着当我调用 $scope.map.control.refresh 函数时地图没有完全加载。因此,它将报告TypeError: $scope.map.control.refresh is not a function
。
一种方法是使用uiGmapIsReady
来检测地图是否可以使用。
function refreshMap()
//show map action
$scope.map.showMap = true;
//refresh map action
uiGmapIsReady.promise()
.then(function (map_instances)
$scope.map.control.refresh(latitude: 48,longitude: 2.3);
);
这个JSFiddle使用uiGmapIsReady
来解决这个问题。
第二种方法是使用$timeout
来延迟刷新动作。
function refreshMap()
//show map action
$scope.map.showMap = true;
//delayed refresh map action
$timeout(function()
$scope.map.control.refresh(latitude: 48,longitude: 2.3);
,3000);
这个JSFiddle使用$timeout
来解决这个问题。
【讨论】:
以上是关于angular-google-maps TypeError: $scope.map.control.refresh 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
angular-google-maps TypeError: $scope.map.control.refresh 不是函数
异常及源码分析org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeE(代