javascript - 点击 map 时未捕获的 TypeError : $scope. map.control.getGMap 不是一个函数

标签 javascript angularjs google-maps google-maps-api-3 angular-google-maps

我正在研究 Angular-Google-MAP。我想在 map 上添加标记。但是当我单击“ map ”时,出现错误$scope.map.control.getGMap is not a function。这是在geocodePosition() 中定义的,本地图点击被调用时。请让我知道为什么它不起作用......

<ui-gmap-google-map center='map.center' zoom='map.zoom' control='map.control' id="map-canvas" events="map.events">
   <ui-gmap-markers models="markers" idkey="markers.id" coords="'coords'"  events="markerEvents" icon="'icon'">                 
   </ui-gmap-markers>   
</ui-gmap-google-map>

在 Controller 中

 function MapController($scope, GMapReady, GoogleMapApi, $timeout) {
     GMapReady.promise().then(
         var map={
             center: {
               latitude: 21.1458004,
               longitude: 79.08815460000005
             },
             bounds : {northeast : { latitude : 79.08815460000005, longitude : 79.08815460000005},
                       southwest : { latitude : 79.08815460000005, longitude : 79.08815460000005}},
             zoom: 5,
             control : {}
            }; 
            $scope.map=map;

            $scope.map.events ={
               click: function(map, eventName, originalEventArgs){

              var e=originalEventArgs[0];
              var lat=e.latLng.lat(),lon=e.latLng.lng();

              var latlng = new google.maps.LatLng(lat, lon);
              geocodePosition(latlng);                 
            }
        }// end of Map event
     );

    function geocodePosition(pos){
       .....some code .......
       ......................
     var map_obj=$scope.map.control.getGMap();
     var service = new google.maps.places.PlacesService(map_obj);  
    };
 }

最佳答案

您的示例中有一个拼写错误,then 函数接受函数回调 作为第一个参数,例如:

uiGmapIsReady.promise().then(function(maps) {
     var map = maps[0]; //get first map instance 
});

出现此错误的原因:

$scope.map.control.getGMap is not a function

因为 $scope.map.control 仅在加载 map 后才进行初始化。

Note: in current version of angular-google-maps library uiGmapIsReady service should be used to wait for directives to finish augmenting control objects.

工作示例

以下示例演示了如何利用Places Library API :

var appMaps = angular.module('appMaps', ['uiGmapgoogle-maps']);
appMaps.config(function(uiGmapGoogleMapApiProvider) {
    uiGmapGoogleMapApiProvider.configure({
        libraries: 'places'
    });
})
appMaps.controller('mapController', function($scope,uiGmapIsReady) {
    
    $scope.map = { 
           center: { latitude: 40.1451, longitude: -99.6680 }, 
           zoom: 4, 
           bounds : {northeast : { latitude : 79.08815460000005, longitude : 79.08815460000005},
                   southwest : { latitude : 79.08815460000005, longitude : 79.08815460000005}},
           control: {},
           events: {
              click: function(map, eventName, originalEventArgs){
                  var e = originalEventArgs[0];
                  $scope.geocodePosition(e.latLng);                 
              }
           }                 
    };
    
    $scope.markers = [];
     
    
    $scope.geocodePosition = function(pos) {
       var map = $scope.map.control.getGMap();
       var service = new google.maps.places.PlacesService(map);  
       var request = {
          location: pos,
          radius: '500',
          //types: ['store']   
       };
       service.nearbySearch(request, function(results, status) {
           if (status == google.maps.places.PlacesServiceStatus.OK) {
              var place = results[0];
              alert(place.name);
           }
       });
    };
    
   
    
    
     uiGmapIsReady.promise().then(function(maps) {
        //...
     });
});
.angular-google-map-container {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
}
<script src="https://code.angularjs.org/1.3.14/angular.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
<script src="http://rawgit.com/angular-ui/angular-google-maps/2.0.X/dist/angular-google-maps.js"></script>
<div ng-app="appMaps" ng-controller="mapController">
    <ui-gmap-google-map center='map.center' zoom='map.zoom' control='map.control' id="map-canvas" events="map.events">
        <ui-gmap-markers models="markers" idkey="markers.id" coords="'coords'" events="markerEvents" >
        </ui-gmap-markers>
    </ui-gmap-google-map>
</div>

关于javascript - 点击 map 时未捕获的 TypeError : $scope. map.control.getGMap 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35348122/

相关文章:

javascript - 我需要这个下拉 php 代码来将人们重定向到 WordPress 中的特定分类法

javascript - AngularJS 从 Controller 打开模态

javascript - 具有 ng-model 依赖性的孤立范围陷阱

ruby-on-rails - 使用 Faker gem 使用 Ruby on Rails 为 Google Maps 生成 VALID 地址

ios - 如何在 GMSMapView 中显示一个圆

javascript - Google map 主题是否有更好的代码结构?

javascript - 将路径坐标获取到我的 JavaScript 文件中

javascript - 如何在 jquery 中单击特定的 list_item 时显示特定的图像?

javascript - Mixpanel Analytics for Javascript 在离线时可以工作吗?

angularjs - 由于在 RC6 中不推荐使用 addProvider,如何在 angular2 jasmine 测试规范中添加提供程序?