【问题标题】:Angular 2 google map implementationAngular 2 谷歌地图实现
【发布时间】:2016-08-10 17:33:21
【问题描述】:

我是 Angular 2 的新手。我想使用 google map API 进行方向服务,并将https://developers.google.com/maps/documentation/javascript/examples/directions-simple 中显示的示例应用到我的项目中,如下代码所示。 但由于某种原因,地图没有加载。有人可以帮我解决这个问题吗?

ma​​p.html

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Directions service</title>
    <style>
      html, body {
        height: 500px;
        margin: 0;
        padding: 0;
      }
      #map {
        height: 500px;
      }
      #floating-panel {
        position: absolute;
        top: 10px;
        left: 25%;
        z-index: 5;
        background-color: #fff;
        padding: 5px;
        border: 1px solid #999;
        text-align: center;
        font-family: 'Roboto','sans-serif';
        line-height: 30px;
        padding-left: 10px;
      }
    </style>
  </head>
  <body>        
    <div id="floating-panel">
    <b>Start: </b>
    <select id="start">
      <option value="chicago, il">Chicago</option>
      <option value="st louis, mo">St Louis</option>
      <option value="joplin, mo">Joplin, MO</option>
      <option value="oklahoma city, ok">Oklahoma City</option>
      <option value="amarillo, tx">Amarillo</option>
      <option value="gallup, nm">Gallup, NM</option>
      <option value="flagstaff, az">Flagstaff, AZ</option>
      <option value="winona, az">Winona</option>
      <option value="kingman, az">Kingman</option>
      <option value="barstow, ca">Barstow</option>
      <option value="san bernardino, ca">San Bernardino</option>
      <option value="los angeles, ca">Los Angeles</option>
    </select>
    <b>End: </b>
    <select id="end">
      <option value="chicago, il">Chicago</option>
      <option value="st louis, mo">St Louis</option>
      <option value="joplin, mo">Joplin, MO</option>
      <option value="oklahoma city, ok">Oklahoma City</option>
      <option value="amarillo, tx">Amarillo</option>
      <option value="gallup, nm">Gallup, NM</option>
      <option value="flagstaff, az">Flagstaff, AZ</option>
      <option value="winona, az">Winona</option>
      <option value="kingman, az">Kingman</option>
      <option value="barstow, ca">Barstow</option>
      <option value="san bernardino, ca">San Bernardino</option>
      <option value="los angeles, ca">Los Angeles</option>
    </select>
    </div>
    <div id="map"></div>
    <script>
      function initMap() {
        var directionsService = new google.maps.DirectionsService;
        var directionsDisplay = new google.maps.DirectionsRenderer;
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 7,
          center: {lat: 41.85, lng: -87.65}
        });
        directionsDisplay.setMap(map);

        var onChangeHandler = function() {
          calculateAndDisplayRoute(directionsService, directionsDisplay);
        };
        document.getElementById('start').addEventListener('change', onChangeHandler);
        document.getElementById('end').addEventListener('change', onChangeHandler);
      }

      function calculateAndDisplayRoute(directionsService, directionsDisplay) {
        directionsService.route({
          origin: document.getElementById('start').value,
          destination: document.getElementById('end').value,
          travelMode: 'DRIVING'
        }, function(response, status) {
          if (status === 'OK') {
            directionsDisplay.setDirections(response);
          } else {
            window.alert('Directions request failed due to ' + status);
          }
        });
      }
    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=MY-KEY&callback=initMap">
    </script>
  </body>
</html>

地图组件

import {Component} from '@angular/core';

@Component({
    selector: 'map',
    templateUrl: 'app/dashboard/features/map.html'
}) 

export class MapComponent {}

【问题讨论】:

    标签: google-maps google-maps-api-3 angular angular2-template


    【解决方案1】:

    找到了解决方案。

    1) 在 index.html 中添加 google map api 脚本

    index.html

    <script src="https://maps.googleapis.com/maps/api/js?key=[YOUR-KEY]" async defer></script>
    

    2) 在您的 html 文件中仅添加与 html 相关的代码。

    ma​​p.html

    <div id="map"></div>
    

    3) 在单独的 css 文件或组件中添加样式相关代码。

    ma​​p.css

          #map {
            height: 500px;
          }
    

    4) 将 google 声明为变量。并在 ngOnInit() 方法中添加所有 javascript。

    MapComponent.ts

    declare var google: any;
    
    @Component({
        selector: 'map',
        templateUrl: 'app/dashboard/features/map.html',
        styleUrls: ['app/dashboard/features/map.css']
    }) 
    
    export class MapComponent implements OnInit, OnChanges {
    
    ngOnInit() {
    
            var directionsService = new google.maps.DirectionsService;
           var directionsDisplay = new google.maps.DirectionsRenderer;
           var map = new google.maps.Map(document.getElementById('map'), {
              zoom: 7,
              center: {lat: 41.85, lng: -87.65}
            });
            directionsDisplay.setMap(map);
            calculateAndDisplayRoute(directionsService, directionsDisplay);
    
          function calculateAndDisplayRoute(directionsService, directionsDisplay) {
    
              var waypts = [];
              var checkboxArray:any[] = [
                  'winnipeg', 'regina','calgary'
          ];
          for (var i = 0; i < checkboxArray.length; i++) {
    
                waypts.push({
                  location: checkboxArray[i],
                  stopover: true
                });
    
            }
    
            directionsService.route({
              origin: {lat: 41.85, lng: -87.65},
              destination: {lat: 49.3, lng: -123.12},
              waypoints: waypts,
              optimizeWaypoints: true,
              travelMode: 'DRIVING'
            }, function(response, status) {
              if (status === 'OK') {
                directionsDisplay.setDirections(response);
              } else {
                window.alert('Directions request failed due to ' + status);
              }
            });
          }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多