【问题标题】:AngularJS Google Map Directive - Error while displaying InfoWindow on Marker Click eventAngularJS Google Map Directive - 在标记单击事件上显示 InfoWindow 时出错
【发布时间】:2017-03-09 19:16:32
【问题描述】:

我正在开发一个 AngularJs Google Map 应用程序(使用 AngularJS Google Map Directive)来使用 Marker 显示当前位置,并在单击 Marker 图标时在 InfoWindow 中显示坐标。

HTML:

 <ui-gmap-google-map center="map.center" zoom="map.zoom" options="options">
    <ui-gmap-marker coords="vm.marker.coords" options="vm.marker.options" events="vm.marker.events" idkey="vm.marker.id">
    </ui-gmap-marker>
    <ui-gmap-window show="false" coords="vm.infoWin.coords" options="vm.infoWin.infoWinOptions">
    </ui-gmap-window>
 </ui-gmap-google-map>

控制器:

uiGmapGoogleMapApi.then(function (maps) {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {
      $scope.map = { center: { latitude: position.coords.latitude, longitude: position.coords.longitude }, zoom: 15 };
      $scope.options = { draggable: false, scrollwheel: false }; //Map

      vm.marker = {
         id: 1,
         coords: {
                   latitude: position.coords.latitude,
                   longitude: position.coords.longitude
                 },
         options: {
                   draggable: false,
                   //labelContent: 'You are here',
                   //labelClass: "marker-labels"
                  },
         events: {
                   click: function () {
                    showInfoWindow();
                 }
           }
     };  

     function showInfoWindow() {
         vm.infoWin = {
                  coords: {
                             latitude: position.coords.latitude,
                             longitude: position.coords.longitude
                          },

                  infoWinOptions: {
                                     visible: true,
                                     content: 'Latitude: ' + position.coords.latitude + ', ' + 'Longitude: ' + position.coords.longitude,
                                     pixelOffset: { height: -32, width: 0 }
                                  }
                      }
                  }
              })
          }
      })

但信息窗口仅在前两次单击标记图标时显示。 Google Chrome 控制台窗口在每次标记点击时都会显示此错误消息:

未捕获的类型错误:无法设置未定义的属性“不透明度”

在 Object.maybeRepaint (angular-google-maps.min.js:7)
.Me。 (angular-google-maps.min.js:7)
在 Object.
.z.trigger (js:95)
在 Ke._.k.trigger (js:113)
.JF。 (maps.googleapis.com/maps-api-v3/api/js/26/10/infowindow.js:3)
在 Object.
.z.trigger (js:95)
在_.JF。 (maps.googleapis.com/maps-api-v3/api/js/26/10/util.js:133)
.Zs..k.Jh (maps.googleapis.com/maps-api-v3/api/js/26/10/common.js:204)

我不确定这是否是处理标记单击事件的正确方法。请帮我解决这个问题。

【问题讨论】:

标签: angularjs google-maps angularjs-google-maps


【解决方案1】:

信息窗口内容需要稍微不同:

1) 首先我们需要引入一个属性来存储信息窗口内容(infoWinOptions 对象不应用于该目的,因为内容无法通过ui-gmap-window 指令的options 属性设置),例如: vm.marker.content

2) 然后像这样绑定它:

<ui-gmap-window coords="vm.infoWin.coords" show="false" options="vm.infoWin.infoWinOptions">
  <span>  {{vm.marker.content}}</span>
</ui-gmap-window> 

Demo

【讨论】:

  • 感谢您的回复。尝试上述解决方案后,控制台窗口中的错误消息消失了。但是仅在前两次单击标记图标时才显示信息窗口。 Plunker 也一样。
  • 将属性closeClick="vm.infoWin.infoWinOptions.visible=false" 添加到ui-gmap-window 也修复了标记图标单击问题。谢谢!
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2012-08-19
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多