【问题标题】:google maps not displaying using ionic/angular2谷歌地图不显示使用离子/角度2
【发布时间】:2016-10-05 14:53:49
【问题描述】:

我正在使用 ionic2 来显示谷歌地图。但是当我运行以下代码时,我得到了空白页。

export class NearByStoresPage {

  constructor(private nav: NavController, private confData: ConferenceData) {
    this.loadNearByOffers();
  }

  loadNearByOffers(){

    let options = {timeout: 10000, enableHighAccuracy: true};

    navigator.geolocation.getCurrentPosition(

        (position) => {
            let latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);               

            let mapOptions = {
                center: latLng,
                zoom: 16,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }

            let map = new google.maps.Map(document.getElementById("map"), mapOptions);

            let marker = new google.maps.Marker({
              map: map,
              animation: google.maps.Animation.DROP,
              position: map.getCenter()
            });

            let content = "<h4>Information!</h4>";          

            let infoWindow = new google.maps.InfoWindow({
              content: content
            });

            google.maps.event.addListener(marker, 'click', function(){
              infoWindow.open(map, marker);
            });
        },

        (error) => {
            console.log(error);
        }, options

    );
  }
}

我将文件包含在 index.html 文件中,

<script src="https://maps.googleapis.com/maps/api/js?key=APIKEY"></script>

HTML 文件,

<ion-navbar *navbar>
  <button menuToggle>
    <ion-icon name="menu"></ion-icon>
  </button>
  <ion-title>Near By Offers</ion-title>
</ion-navbar>

<ion-content class="map-page">
  <div id="map"></div>
</ion-content>

但是下面的代码工作正常,

this.confData.getMap().then(mapData => {
      let mapEle = document.getElementById('map');

      let map = new google.maps.Map(mapEle, {
        center: mapData.find(d => d.center),
        zoom: 16
      });

      mapData.forEach(markerData => {
        let infoWindow = new google.maps.InfoWindow({
          content: `<h5>${markerData.name}</h5>`
        });

        let marker = new google.maps.Marker({
          position: markerData,
          map: map,
          title: markerData.name
        });

        marker.addListener('click', () => {
          infoWindow.open(map, marker);
        });
      });

      google.maps.event.addListenerOnce(map, 'idle', () => {
        mapEle.classList.add('show-map');
      });

    });

【问题讨论】:

  • 我也有同样的问题,谁有解决方案?

标签: angular ionic2


【解决方案1】:

为您的地图 DIV 添加宽度和高度:

<div id="map" style="width:800px;height:600px"></div>

还有这一行

<script src="https://maps.googleapis.com/maps/api/js?key=APIKEY"></script>

需要指定回调函数

【讨论】:

    【解决方案2】:

    我认为问题在于您在构造函数中调用了this.loadNearByOffers(); 方法。然后该方法尝试通过从 DOM 获取元素来加载地图

    document.getElementById("map")

    但是当你的构造函数被执行时,DOM中的那个元素还不存在,这就是地图没有正确加载的原因。

    我不知道您在项目中使用的是哪个版本的 Ionic,但您可以使用 page events 之一,如 ionViewDidEnter 以确保代码将被执行(并且地图将被初始化)在 DOM 元素可用之后。

    ionViewDidEnter(){
      // the html of the page is now available
      this.loadNearByOffers();
    }
    

    你可以找到一个工作的 plunker here

    【讨论】:

    • 在我的情况下,我在 ionViewLoaded 方法中调用 getElementById,但地图仍然没有显示。Cordova CLI:6.3.0 Gulp 版本:CLI 版本 3.9.1 Gulp local:本地版本 3.9。 1 Ionic 框架版本:2.0.0-beta.11 Ionic CLI 版本:2.0.0-beta.36 Ionic App Lib 版本:2.0.0-beta.19 操作系统:节点版本:v4.4.7
    • 几个问题:地图元素的高度和宽度是否设置为100%(或任何其他大小)?从 Google 导入 js 时,您是否使用了有效的 API KEY?是只发生在设备上还是浏览器上?
    • 是的,宽度和高度设置为 100%,我没有使用 API 密钥,是的,我正在从谷歌导入 JS,发生在设备、离子视图和带有离子服务的浏览器上
    • 嗯,你能用那个 plunker 来包含你的代码吗?也许如果你可以在那里复制这个问题,我可以看看它
    • 找到指向重要文件的链接plnkr.co/edit/v3pzQ9iZHq1o0GXIbYTk?p=catalogue
    【解决方案3】:

    尝试调用方法 loadNearByOffers() 如下。

    ionViewLoaded(){
       this.platform.ready().then(() => {
       this.loadNearByOffers();
       }
    }
    

    地图应该在设备就绪事件中加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-10
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2017-04-14
      • 2018-11-15
      相关资源
      最近更新 更多