首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReferenceError: google不是使用ng-map GeoCoder服务定义的。

ReferenceError: google不是使用ng-map GeoCoder服务定义的。
EN

Stack Overflow用户
提问于 2016-10-22 14:00:26
回答 1查看 4.7K关注 0票数 3

我在试图为吴-地图库使用地理编码服务时遇到了以下错误

angular.js:13642 ReferenceError: google is not defined at Object.t [as geocode] (http://localhost:6240/Scripts/ng-map.min.js:25:28246)

我把服务注入我的控制器

代码语言:javascript
复制
appModule.controller('MyController', ['$scope', 'NgMap', 'NavigatorGeolocation', 'GeoCoder', 
    function ($scope, NgMap, NavigatorGeolocation, GeoCoder) {
        GeoCoder.geocode({address: 'Avenida Calle 26 # 40-40, Bogotá'}).then(function (result) {
            //... do something with result
            console.log('RESULT GEOCODER: ', result);
        });
    }]);

我还用NgMap函数进行了测试,得到了相同的引用错误。

代码语言:javascript
复制
NgMap.getGeoLocation('Avenida Calle 26 # 40-40, Bogotá').then(function (result) {
    console.log('GETGEOLOCATION: ', result);
}, function (error) {
    console.log('Error getting geolocation: ', error);
});  

如代码片段所示,我已经成功地使用了其他NgMap和NavigatorGeolocation服务。

这是我的页面代码

代码语言:javascript
复制
<div map-lazy-load="https://maps.google.com/maps/api/js" map-lazy-load-params="{{ $ctrl.googleMapsUrl }}">
    <div class="row">
        <div class="col-md-6">
            <ng-map id="map"
                center="{{ $ctrl.mapCenter }}"
                street-view="{{ $ctrl.svp }}"></ng-map>
        </div>
        <div class="col-md-6">
            <ng-map id="sv" />
        </div>
   </div>
</div>

在相应的控制器/组件中

代码语言:javascript
复制
$ctrl.googleMapsUrl = "https://maps.googleapis.com/maps/api/js?key=MY-API-KEY";
$ctrl.mapCenter = 'current-location';

NavigatorGeolocation.getCurrentPosition({ timeout: 10000 }).then(function (ll) {
    $ctrl.svp = "StreetViewPanorama(document.querySelector('ng-map#sv'), {position:new google.maps.LatLng(" + ll.coords.latitude + " , " + ll.coords.longitude + ")})";
 }, function (error) {
     console.log('error getCurrentPosition: ', error);
 });

我使用的是AngularJS v1.5.6

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 14:49:46

GeoCoder服务使用google.maps.Geocoder class,而google.maps.Geocoder class又是Google的一部分。在控制器Google库中调用GeoCoder.geocode方法的时刻尚未加载(在您的示例中,它是通过map-lazy-load指令异步加载的),这就是发生此错误的原因。

您可以使用NgMap.getMap函数来保证Google已经就绪:

代码语言:javascript
复制
NgMap.getMap("map").then(function () {

      GeoCoder.geocode({ address: 'Avenida Calle 26 # 40-40, Bogotá' })
      .then(function (result) {
            //...
      });

 });

Demo

代码语言:javascript
复制
angular.module('mapApp', ['ngMap'])
    .controller('mapCtrl', ['$scope', 'NgMap', 'NavigatorGeolocation', 'GeoCoder',
        function ($scope, NgMap, NavigatorGeolocation, GeoCoder) {
            vm = this;

            NgMap.getMap("map").then(function () {

                GeoCoder.geocode({ address: 'Avenida Calle 26 # 40-40, Bogotá' })
                    .then(function (result) {
                        vm.mapCenter = result[0].geometry.location;
                    });

            });


            vm.googleMapsUrl = "https://maps.googleapis.com/maps/api/js";
            vm.mapCenter = null;


        }]);
代码语言:javascript
复制
<script src="https://code.angularjs.org/1.5.6/angular.js"></script>
<script src="https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/scripts/ng-map.js"></script>
<div ng-app="mapApp" ng-controller="mapCtrl as vm">

		<div map-lazy-load="https://maps.google.com/maps/api/js" map-lazy-load-params="{{ vm.googleMapsUrl }}">
			<ng-map id="map" center="{{ vm.mapCenter }}"></ng-map>
		</div>

</div>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40193036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档