【问题标题】:how to include google-map in polymer#^2.0 as it was working in polymer 1.7如何在聚合物#^2.0 中包含谷歌地图,因为它在聚合物 1.7 中工作
【发布时间】:2017-11-20 07:38:19
【问题描述】:

我已经包含了 api,在聚合物 1.7 中一切正常之前,升级到聚合物 ^2.0 后,谷歌地图无法呈现。 这是我在主应用程序页面中编写的聚合物类库中的代码:

<iron-pages role="main" selected="[[page]]" attr-for-selected="name" selected-attribute="visible" fallback-selection="404">  
  <jj-maps name="maps"  user="{{user}}" sprof="{{sprof}}"></jj-maps>
  <jj-list name="list" >    Jobs   </jj-list>  
  <jj-infos name="infos">    infos      </jj-infos>
  <jj-contacts name="contacts" >  Contacts  </jj-contacts>
  <jj-messages name="messages">  Messages  </jj-messages>
  <jj-404 name="404" > 404          </jj-404>
</iron-pages>

在 jj-maps.html 代码示例是:

<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="../bower_components/google-map/google-map.html">
<link rel="import" href="../bower_components/google-map/google-map-marker.html">

模板标签中的样式代码:

<dom-module id="jj-maps">
  <template>
    <style  include="iron-flex iron-flex-alignment">
      :host {
       .....
       google-map, #mapResults {
           margin-top: 10px;
           position: relative;
           height: 100vh;
           width: 100vh%; 
           z-index: 1;
       }

....

       <div id="mapResults"> 
         <google-map 
                  id="map" 
                  map="{{map}}" 
                  latitude="[[latitude]]" 
                  longitude="[[longitude]]" 
                  zoom="10"
                  api-key="[[myApiKey]]"  
                  on-google-map-ready= '_mapLoaded' 
                  additional-map-options='{"gestureHandling" : "greedy"}'
                  >
                 <google-map-marker map="{{map}}" slot="marker" latitude="{{latitude}}" longitude="{{longitude}}"
                      title="You are here !" icon="./src/image/gpslocc.png" draggable="true">
                 </google-map-marker>
                 <template is="dom-repeat" items="{{sprof}}" as="item">
                        <google-map-marker map="[[map]]" slot="marker" latitude="[[item.myLat]]" longitude="[[item.myLng]]" animation="DROP"  click-events  title="{{item.prof}}" icon="{{calculateIconType(item.isFree)}}" on-google-map-marker-click='showUserDetail' userid="[[item.uid]]" isFree="{{item.isFree}}" >
                        </google-map-marker>

                 </template>
                 <paper-fab icon="maps:my-location" on-tap="updateCurrentPosition"></paper-fab>
                </google-map>
        </div>

  </template>

此代码在以前的聚合物中完美运行。还有一点,当我将依赖项安装为bower install --save GoogleWebComponents/google-map

bower 向我要了两个:

 - Unable to find a suitable version for polymer, please choose one by typing one of the numbers below: 
 I chose :  7) polymer#^2.0.0 which resolved to 2.0.1 and is required by myApp
    - Unable to find a suitable version for webcomponentsjs, please choose one by typing one of the numbers below:
I chose : 2) webcomponentsjs#^1.0.0 which resolved to 1.0.1 and is required by myApp

抱歉,我已经写了详细的代码。同时我尝试了很多选项,但无法在我的 jj-maps 元素中渲染地图(类基本模板,即使我尝试过旧模板(与聚合物 1.7 版本相同)

这是控制台警告:

dom-module.html:24 dom-module google-map has style outside template
dom-module google-map-marker has style outside template

地图未呈现...

那么,怎么解决呢?提前致谢。 (之前在 jobijoy.com 工作的聚合物版本

【问题讨论】:

    标签: google-maps polymer polymer-2.x


    【解决方案1】:
    slot="marker"
    

    应该可以解决问题。

    很遗憾,代码中的示例没有插入这一重要行。

    这里是没有 slot="markers" 的当前代码示例:

    <google-map latitude="37.77493" longitude="-122.41942" fit-to-markers>
        <google-map-marker latitude="37.779" longitude="-122.3892" draggable="true" title="Go Giants!">
        </google-map-marker>
        <google-map-marker latitude="37.777" longitude="-122.38911">
        </google-map-marker>
    </google-map>
    

    在代码中建议的更正示例下方:

    <google-map latitude="37.77493" longitude="-122.41942" fit-to-markers>
        <google-map-marker slot="markers" latitude="37.779" longitude="-122.3892" draggable="true" title="Go Giants!">
        </google-map-marker>
        <google-map-marker slot="markers" latitude="37.777" longitude="-122.38911">
        </google-map-marker>
    </google-map>
    

    发生了什么?

    google-map 不知道何时插入或更新标记,因为没有属性 slot="markers",它们被插入到应该插入的插槽之外。

    此问题可能会导致多种后果:可以查看地图,但无法响应重要事件,例如适合标记。

    在从最初的无插槽版本到当前的插槽版本(并很快迁移到聚合物 3.0 版本)的优秀 google-map 网络组件的动荡中,忙碌的开发人员很可能只是忘记添加这个重要的示例中的 slot="markers" 属性展示了如何在 google-map 中添加每个新的 google-map-marker webcomponent。

    这只是对上面已经正确的答案的补充。如果有人需要更多解释,我提供这些,如果我是正确的,当然(如果我得出错误的结论,请纠正我)。

    您可以通过检查您的 google-map 元素来检测此缺陷。没有 slot="markers" 更正,打开 google-map;在里面,打开铁选择器;最后在里面打开元素&lt;slot id="markers" name="markers"&gt;&lt;slot&gt;。如果您不使用建议的更正,此插槽将为空。如果您使用此建议的更正,此插槽将包含对每个 google-map-marker 的引用。因此 google-map 元素将能够处理几个事件,这些事件依赖于检测每个标记何时插入或更新。

    抱歉,回答太长了。

    【讨论】:

    • 似乎即使我把
    【解决方案2】:

    我遇到了完全相同的问题。尝试将 slot="marker" 添加到 google-map-marker,因为有人建议 Polymer 2.0 issue in github 但对我不起作用。看起来 google-map 组件的大小设置为 0 by 0,因此根本不显示。由于 google 组件未更新为与 Polymer 2.0 兼容。我已经手动更新了 bower_component 文件夹下的本地 google-map.html 和 google-map-marker.html 文件,并将样式标签移到了模板标签中。警告消失了,现在显示地图。我想我们必须等待谷歌组件的更新才能正常工作。我希望这会有所帮助。

    【讨论】:

    • 当我在 google-map 的模板标签下包含样式标签时,它现在呈现。 :)) 谢谢!
    • 很高兴它有帮助:-)
    • google-map 元素已更新为 Polymer 版本 2.0。 Polymer 团队管理的所有元素都已更新。你只需要安装它们并加上#2.0-preview
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多