如何将离子电容器 Google 地图插件与 Vue JS 结合使用

此应用程序是使用Ionic Framework和 Vue JS 构建的。我们只为 UI 组件使用 Ionic Framework,这些组件可以替换为任何 vue js 兼容的 UI 组件

主页.vue

脚本部分:

导入
我们首先导入必要的依赖项和组件。我们从包中导入 Ionic 框架组件@ionic/vue,并使用 vue 包访问 ref 函数,这使我们能够创建反应式引用。此外,我们还从其他文件导入两个自定义组件MyMap和。MarkerInfoWindow最后,我们从 Capacitor 框架导入Capacitor,该框架用于构建跨平台应用程序。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">IonContent</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">IonHeader</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">IonPage</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">IonTitle</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">IonToolbar</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">IonPopover</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">modalController</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">@ionic/vue</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">ref</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">vue</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-name-color)">MyMap</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">./MyMap.vue</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-name-color)">MarkerInfoWindow</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">../components/MarkerInfoWindow.vue</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">Capacitor</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">@capacitor/core</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
</code></span></span>

变量声明
我们声明两个反应性引用变量:markerInfomarkerIsOpen。这些变量将分别保存有关当前所选标记以及标记弹出框是打开还是关闭的信息。

我们定义一个名为 的数组markerData,用于保存地图上标记的样本数据。每个标记对象由coordinates(纬度和经度)、 atitle和 a组成snippet。您可以根据需要添加更多标记来自定义此数据。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">markerInfo</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">ref</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-name-color)">any</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">markerIsOpen</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">ref</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-name-color)">boolean</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">false</span><span style="color:var(--syntax-text-color)">);</span>

<span style="color:var(--syntax-comment-color)">// sample data for the map</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">markerData</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">[</span>
  <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">lat</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">37.769</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">lng</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-error-color)">-</span><span style="color:var(--syntax-literal-color)">122.446</span> <span style="color:var(--syntax-text-color)">},</span>
    <span style="color:var(--syntax-name-color)">title</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">title one</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">snippet</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">title one snippet content will be presented here</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">lat</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">37.774</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">lng</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-error-color)">-</span><span style="color:var(--syntax-literal-color)">122.434</span> <span style="color:var(--syntax-text-color)">},</span>
    <span style="color:var(--syntax-name-color)">title</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">title two</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">snippet</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">title two snippet content will be presented here</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">lat</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">37.783</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">lng</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-error-color)">-</span><span style="color:var(--syntax-literal-color)">122.408</span> <span style="color:var(--syntax-text-color)">},</span>
    <span style="color:var(--syntax-name-color)">title</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">title three</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">snippet</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">title three snippet content will be presented here</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-comment-color)">// Add more points as needed</span>
<span style="color:var(--syntax-text-color)">];</span>
</code></span></span>

功能

openModal是单击标记时的事件处理程序。它使用创建并呈现一个模式窗口modalController.create()。模式显示MarkerInfoWindow组件,其中显示有关 的详细信息marker

mapClicked是单击地图时的事件侦听器。它只是将一条消息记录到控制台,允许您在单击地图时执行任何所需的操作。

getMarkerInfomarker对象作为输入并返回数组中的关联信息markerData。此函数用于在单击标记时检索标记信息。

markerClicked是单击标记时的事件处理程序。它使用Capacitor.isNativePlatform(). 如果它不是原生的,它调用函数openModal以模态显示标记信息。这种区别是必要的,因为网络版本不会直接在地图上显示信息窗口。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">openModal</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">async</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">any</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">modal</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">await</span> <span style="color:var(--syntax-name-color)">modalController</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">create</span><span style="color:var(--syntax-text-color)">({</span>
    <span style="color:var(--syntax-name-color)">component</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">MarkerInfoWindow</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">componentProps</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
      <span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-text-color)">},</span>
    <span style="color:var(--syntax-name-color)">initialBreakpoint</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">0.2</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">breakpoints</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">0.2</span><span style="color:var(--syntax-text-color)">],</span>
    <span style="color:var(--syntax-name-color)">backdropBreakpoint</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">showBackdrop</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-declaration-color)">false</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">backdropDismiss</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-declaration-color)">true</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">});</span>

  <span style="color:var(--syntax-name-color)">modal</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">present</span><span style="color:var(--syntax-text-color)">();</span>

  <span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">data</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">role</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">await</span> <span style="color:var(--syntax-name-color)">modal</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">onWillDismiss</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-text-color)">};</span>


<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">mapClicked</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">mapClicked</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">};</span>


<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">getMarkerInfo</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-text-color)">latitude</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">number</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">longitude</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">number</span> <span style="color:var(--syntax-text-color)">})</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">markerData</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">filter</span><span style="color:var(--syntax-text-color)">(</span>
    <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">m</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span>
      <span style="color:var(--syntax-name-color)">m</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">lat</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">latitude</span> <span style="color:var(--syntax-error-color)">&&</span>
      <span style="color:var(--syntax-name-color)">m</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">lng</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">longitude</span>
  <span style="color:var(--syntax-text-color)">)[</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">];</span>
<span style="color:var(--syntax-text-color)">};</span>


<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">markerClicked</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">any</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">);</span>


  <span style="color:var(--syntax-comment-color)">// only use dialog in web since we doesnt show info window</span>
  <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-error-color)">!</span><span style="color:var(--syntax-name-color)">Capacitor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">isNativePlatform</span><span style="color:var(--syntax-text-color)">())</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">openModal</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">getMarkerInfo</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">));</span>
  <span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-text-color)">};</span>
</code></span></span>

模板部分:

模板部分使用 Ionic Vue 组件定义我们组件的 HTML 模板的结构和布局。让我们看一下:

<ion-page>代表我们的 Ionic 应用程序中的一个页面。它为整个内容提供了一个容器。

<ion-header>包含页面的标题工具栏。我们用它来显示应用程序标题。

<ion-toolbar>代表标题内的工具栏。它为按钮、标题和其他元素提供了位置。

<ion-title>显示页面的标题。在这种情况下,它被设置为“Vue + Capacitor + Google Maps”。

<ion-content>包含页面的主要内容。它提供了一个可滚动的区域,我们将在其中显示我们的地图和标记。

<my-map>是代表地图的自定义组件。我们传入markerDataprop 以提供标记信息。该组件还发出两个事件:onMapClickedonMarkerClicked,这使我们能够分别处理地图和标记点击。

<ion-popover>代表一个弹出窗口,它是一个小的覆盖窗口。它需要isOpenprop 来控制 popover 的可见状态

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>  <span style="color:var(--syntax-error-color)"><ion-page></span>
    <span style="color:var(--syntax-error-color)"><ion-header</span> <span style="color:var(--syntax-name-color)">:translucent=</span><span style="color:var(--syntax-string-color)">"true"</span><span style="color:var(--syntax-error-color)">></span>
      <span style="color:var(--syntax-error-color)"><ion-toolbar></span>
        <span style="color:var(--syntax-error-color)"><ion-title></span>Vue + Capacitor + Google Maps<span style="color:var(--syntax-error-color)"></ion-title></span>
      <span style="color:var(--syntax-error-color)"></ion-toolbar></span>
    <span style="color:var(--syntax-error-color)"></ion-header></span>

    <span style="color:var(--syntax-error-color)"><ion-content></span>
      <span style="color:var(--syntax-error-color)"><my-map</span>
        <span style="color:var(--syntax-name-color)">:markerData=</span><span style="color:var(--syntax-string-color)">"markerData"</span>
        @<span style="color:var(--syntax-name-color)">onMapClicked=</span><span style="color:var(--syntax-string-color)">"mapClicked"</span>
        @<span style="color:var(--syntax-name-color)">onMarkerClicked=</span><span style="color:var(--syntax-string-color)">"markerClicked"</span>
      <span style="color:var(--syntax-error-color)">></my-map></span>
      <span style="color:var(--syntax-error-color)"><ion-popover</span>
        <span style="color:var(--syntax-name-color)">:is-open=</span><span style="color:var(--syntax-string-color)">"markerIsOpen"</span>
        <span style="color:var(--syntax-name-color)">size=</span><span style="color:var(--syntax-string-color)">"cover"</span>
        @<span style="color:var(--syntax-name-color)">did-dismiss=</span><span style="color:var(--syntax-string-color)">"markerIsOpen = false"</span>
      <span style="color:var(--syntax-error-color)">></span>
        <span style="color:var(--syntax-error-color)"><ion-content</span> <span style="color:var(--syntax-name-color)">class=</span><span style="color:var(--syntax-string-color)">"ion-padding"</span><span style="color:var(--syntax-error-color)">></span>
          <span style="color:var(--syntax-error-color)"><div></span>{
    
    { markerInfo?.title }}<span style="color:var(--syntax-error-color)"></div></span>
        <span style="color:var(--syntax-error-color)"></ion-content></span>
      <span style="color:var(--syntax-error-color)"></ion-popover></span>
    <span style="color:var(--syntax-error-color)"></ion-content></span>
  <span style="color:var(--syntax-error-color)"></ion-page></span>
</code></span></span>

我的地图.vue

在本节中,我们将讨论一个新组件,该组件负责使用 Capacitor Google 地图插件渲染地图和标记。我们将解释包含逻辑的脚本部分和定义组件结构的模板部分。

脚本部分:

脚本部分包含自定义地图组件的逻辑和功能。让我们分解一下:

Imports
我们从 vue 包中导入必要的功能,例如 onMounted、nextTick、ref 和 onUnmounted。这些函数用于处理组件生命周期事件。我们还从 @capacitor/google-maps 包导入 GoogleMap 对象,该对象提供与 Google 地图插件交互的功能。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">onMounted</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">nextTick</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">ref</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">onUnmounted</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">vue</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">GoogleMap</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">@capacitor/google-maps</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>
</code></span></span>

Props 和 Emits 声明
组件定义了两个部分:props 和 emits。Props 允许我们将数据传递到组件中,而 emits 使我们能够触发自定义事件。

在这种情况下,组件需要一个名为 prop 的属性markerData,其中包含一个标记对象数组。
发出部分声明了两个事件:onMarkerClickedonMapClicked。单击标记或地图时,这些事件将发回父组件。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// PROPS</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">props</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">defineProps</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">markerData</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">any</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">title</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">string</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">snippet</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">string</span> <span style="color:var(--syntax-text-color)">}[];</span>
<span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-comment-color)">// EVENTS</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">emits</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">defineEmits</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">onMarkerClicked</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">info</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">any</span><span style="color:var(--syntax-text-color)">):</span> <span style="color:var(--syntax-declaration-color)">void</span><span style="color:var(--syntax-text-color)">;</span>
  <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">onMapClicked</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">):</span> <span style="color:var(--syntax-declaration-color)">void</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>
</code></span></span>

变量声明

mapRef是一个响应式引用变量,它保存对 DOM 中地图元素的引用。
markerIds是一个反应性参考变量,它包含一个标记 ID 数组。
newMap是一个变量,它将保存 GoogleMap 对象的一个​​实例。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">mapRef</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">ref</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-name-color)">HTMLElement</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">markerIds</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">ref</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-name-color)">string</span><span style="color:var(--syntax-text-color)">[]</span> <span style="color:var(--syntax-error-color)">|</span> <span style="color:var(--syntax-declaration-color)">undefined</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-declaration-color)">let</span> <span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">GoogleMap</span><span style="color:var(--syntax-text-color)">;</span>
</code></span></span>

生命周期钩子

onMounted是一个生命周期钩子,在组件安装到 DOM 时运行。在这个钩子中,我们用来nextTick等待组件完全渲染。然后,我们调用该createMap函数来初始化并渲染地图。

onUnmounted是一个生命周期钩子,在组件即将被卸载时运行。在这个钩子中,我们调用对象removeMarkers的方法newMap来从地图上删除标记。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-name-color)">onMounted</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">async</span> <span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">mounted </span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">mapRef</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">value</span><span style="color:var(--syntax-text-color)">);</span>
  <span style="color:var(--syntax-declaration-color)">await</span> <span style="color:var(--syntax-name-color)">nextTick</span><span style="color:var(--syntax-text-color)">();</span>
  <span style="color:var(--syntax-declaration-color)">await</span> <span style="color:var(--syntax-name-color)">createMap</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-text-color)">});</span>

<span style="color:var(--syntax-comment-color)">// remove markers on unmount</span>
<span style="color:var(--syntax-name-color)">onUnmounted</span><span style="color:var(--syntax-text-color)">(()</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">onunmounted</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">);</span>
  <span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">removeMarkers</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">markerIds</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-name-color)">value</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-name-color)">string</span><span style="color:var(--syntax-text-color)">[]);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>

函数声明

addSomeMarkers是一个异步函数,它将 GoogleMap 对象的实例作为参数。它从地图中删除任何现有标记,并根据传递给组件的markerData 属性添加新标记。

createMap是一个异步函数,负责创建和渲染地图。它首先检查该mapRef值是否存在。然后,它使用 Capacitor Google Maps 插件创建一个新的地图实例。它设置地图的 ID、关联的 DOM 元素、API 密钥和初始配置(中心和缩放级别)。
创建地图后,它调用该addSomeMarkers函数将标记添加到地图。最后,它设置事件侦听器来处理标记单击和地图单击,向父组件发出适当的事件。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">addSomeMarkers</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">async</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">GoogleMap</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">markerIds</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-name-color)">value</span> <span style="color:var(--syntax-error-color)">&&</span> <span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">removeMarkers</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">markerIds</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-name-color)">value</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-name-color)">string</span><span style="color:var(--syntax-text-color)">[]);</span>

  <span style="color:var(--syntax-comment-color)">// Plot each point on the map</span>
  <span style="color:var(--syntax-declaration-color)">let</span> <span style="color:var(--syntax-name-color)">markers</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">props</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">markerData</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">map</span><span style="color:var(--syntax-text-color)">(({</span> <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">title</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">snippet</span> <span style="color:var(--syntax-text-color)">})</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">{</span>
      <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">,</span>
      <span style="color:var(--syntax-name-color)">title</span><span style="color:var(--syntax-text-color)">,</span>
      <span style="color:var(--syntax-name-color)">snippet</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-text-color)">};</span>
  <span style="color:var(--syntax-text-color)">});</span>

  <span style="color:var(--syntax-name-color)">markerIds</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">value</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">await</span> <span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">addMarkers</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">markers</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">};</span>

<span style="color:var(--syntax-comment-color)">/**
 * 
 */</span>
<span style="color:var(--syntax-declaration-color)">async</span> <span style="color:var(--syntax-declaration-color)">function</span> <span style="color:var(--syntax-name-color)">createMap</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-error-color)">!</span><span style="color:var(--syntax-name-color)">mapRef</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">value</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-declaration-color)">return</span><span style="color:var(--syntax-text-color)">;</span>

  <span style="color:var(--syntax-comment-color)">// render map using capacitor plugin</span>
  <span style="color:var(--syntax-name-color)">newMap</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">await</span> <span style="color:var(--syntax-name-color)">GoogleMap</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">create</span><span style="color:var(--syntax-text-color)">({</span>
    <span style="color:var(--syntax-name-color)">id</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">my-cool-map</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">element</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">mapRef</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">value</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">apiKey</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-declaration-color)">import</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">meta</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">env</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">VITE_APP_YOUR_API_KEY_HERE</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-name-color)">string</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">config</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
      <span style="color:var(--syntax-name-color)">center</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
        <span style="color:var(--syntax-name-color)">lat</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">37.783</span><span style="color:var(--syntax-text-color)">,</span>
        <span style="color:var(--syntax-name-color)">lng</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-error-color)">-</span><span style="color:var(--syntax-literal-color)">122.408</span><span style="color:var(--syntax-text-color)">,</span>
      <span style="color:var(--syntax-text-color)">},</span>
      <span style="color:var(--syntax-name-color)">zoom</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">12</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-text-color)">});</span>

  <span style="color:var(--syntax-comment-color)">// add markers to map</span>
  <span style="color:var(--syntax-name-color)">addSomeMarkers</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">);</span>

  <span style="color:var(--syntax-comment-color)">// Set Event Listeners...</span>
  <span style="color:var(--syntax-comment-color)">// Handle marker click, send event back to parent</span>
  <span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">setOnMarkerClickListener</span><span style="color:var(--syntax-text-color)">((</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">emits</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">onMarkerClicked</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">);</span>
  <span style="color:var(--syntax-text-color)">});</span>

  <span style="color:var(--syntax-comment-color)">// Handle map click, send event back to parent</span>
  <span style="color:var(--syntax-name-color)">newMap</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">setOnMapClickListener</span><span style="color:var(--syntax-text-color)">(()</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">emits</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">onMapClicked</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">);</span>
  <span style="color:var(--syntax-text-color)">});</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span>

模板部分

模板部分定义组件的 HTML 模板的结构。这是一个细分:

<div>:充当地图组件的容器。

<capacitor-google-map>:代表Capacitor Google Maps插件提供的自定义地图组件。它接受 ref 属性 (mapRef) 来引用地图元素,并应用内联样式来设置地图的显示、宽度和高度。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)"><template></span>
  <span style="color:var(--syntax-error-color)"><div></span>
    <span style="color:var(--syntax-error-color)"><capacitor-google-map</span>
      <span style="color:var(--syntax-name-color)">ref=</span><span style="color:var(--syntax-string-color)">"mapRef"</span>
      <span style="color:var(--syntax-name-color)">style=</span><span style="color:var(--syntax-string-color)">"display: inline-block; width: 100vw; height: 86vh"</span>
    <span style="color:var(--syntax-error-color)">></span>
    <span style="color:var(--syntax-error-color)"></capacitor-google-map></span>
  <span style="color:var(--syntax-error-color)"></div></span>
<span style="color:var(--syntax-error-color)"></template></span>
</code></span></span>

在本节中,我们探讨了与 Capacitor 和 Google 地图集成的自定义地图组件的代码。脚本部分处理逻辑,包括创建地图、添加标记和处理事件。模板部分定义了组件的 HTML 模板的结构,其中包括<div>容器和<capacitor-google-map>Capacitor Google 地图插件提供的元素。

标记信息窗口.vue

在本节中,我们将讨论显示标记信息的 Vue 组件。InfoWindow由于不支持预期的 GoogleMaps,我们在此示例中仅将此组件用于应用程序的 Web 版本。

我们将解释呈现标记数据的模板部分和定义组件逻辑的脚本部分。

模板部分:

模板部分负责呈现组件的 HTML 结构。让我们分解一下:

<ion-content>
此 Ionic 框架组件代表组件的主要内容区域。它充当组件内容的容器。

<p>
此 HTML 段落元素显示标记信息。段落的内容是使用 Vue 表达式动态生成的JSON.stringify(marker,null,2)。它使用该JSON.stringify()函数将 marker prop 转换为带缩进 2 个空格的格式化 JSON 字符串。

这只是您希望形成和显示的信息的占位符,以供用户查看刚刚单击的标记

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-declaration-color)">template</span><span style="color:var(--syntax-error-color)">></span>
  <span style="color:var(--syntax-error-color)"><ion-content</span> <span style="color:var(--syntax-error-color)">></span>
    <span style="color:var(--syntax-error-color)"><p></span><span style="color:var(--syntax-string-color)">{
    
    {</span><span style="color:var(--syntax-name-color)">JSON</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">stringify</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">,</span><span style="color:var(--syntax-declaration-color)">null</span><span style="color:var(--syntax-text-color)">,</span><span style="color:var(--syntax-literal-color)">2</span><span style="color:var(--syntax-text-color)">)</span><span style="color:var(--syntax-string-color)">}}</span><span style="color:var(--syntax-error-color)"></p></span>
  <span style="color:var(--syntax-error-color)"></ion-content></span>
<span style="color:var(--syntax-error-color)"></</span><span style="color:var(--syntax-declaration-color)">template</span><span style="color:var(--syntax-error-color)">></span>
</code></span></span>

脚本部分:

脚本部分包含组件的逻辑和功能。让我们看一下:

导入:
我们从 @ionic/vue 包中导入该组件所需的所有 Ionic 组件。该组件在模板部分中用于表示内容区域。

Props 和 Emits 声明:
该组件定义了两个部分:propsemits。Props 允许我们将数据传递到组件中,而 emits 使我们能够触发自定义事件。

在这种情况下,组件需要一个名为的 prop ,其中包含一个具有和属性marker的对象。coordinatetitle

emits 部分声明了一个名为 的事件onDismiss

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-name-color)">script</span> <span style="color:var(--syntax-name-color)">setup</span> <span style="color:var(--syntax-name-color)">lang</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">ts</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-error-color)">></span>
<span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">IonContent</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">@ionic/vue</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">;</span>

<span style="color:var(--syntax-comment-color)">// PROPS</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">props</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">defineProps</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">marker</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">coordinate</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">any</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">title</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">string</span> <span style="color:var(--syntax-text-color)">};</span>
<span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>

<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">emits</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">defineEmits</span><span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">event</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">onDismiss</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">):</span> <span style="color:var(--syntax-declaration-color)">void</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-error-color)">></span><span style="color:var(--syntax-text-color)">();</span>

</code></span></span>

摘要:
在本节中,我们检查了显示标记信息的 Vue 组件的代码。模板部分使用JSON.stringify()表达式呈现标记数据。脚本部分定义道具并发出声明。

您可以使用此组件在 Vue 应用程序中显示标记信息。根据需要自定义模板部分以实现所需的布局和样式。

结论:

在这篇博文中,我们检查了使用 Vue、Ionic Capacitor 和 Google Maps 构建的自定义地图组件的代码。

通过理解这段代码,您现在已经为构建与 Ionic Capacitor 和 Google 地图集成的 Vue 移动应用程序奠定了基础。您可以通过添加附加功能或样式来进一步自定义组件,以满足您的特定需求。

请记住在函数中正确配置您的 API 密钥,createMap以确保 Google 地图插件正常运行。此外,请随意探索离子电容器和 Google 地图文档以了解更多高级特性和功能。

猜你喜欢

转载自blog.csdn.net/jascl/article/details/131322493