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(代

一个SQL语句的执行顺序

前端小知识~~关于css3新增知识~~归纳总结

AngularJS 谷歌地图指令

Exception-Handling