angular google maps TypeError:$scope.map.control.refresh不是函数

angular-google-maps TypeError: $scope.map.control.refresh is not a function

本文关键字:refresh control 函数 map scope maps google TypeError angular      更新时间:2023-09-26

我在我的cordova移动应用程序中集成了角度谷歌地图。我想使用以下功能刷新地图。

        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类型错误:$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示例。

有办法解决这个问题吗?谢谢

实际上,这个问题的关键是在映射完全加载之前不应该使用$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来解决这个问题。