【问题标题】:ReferenceError: element is not defined - cordova-plugin-googlemapsReferenceError:元素未定义-cordova-plugin-googlemaps
【发布时间】:2018-12-24 23:31:44
【问题描述】:

我正在开发一个 Ionic 3 项目,对于地图相关功能,我选择了 Ionic Team 建议的 Google Maps 插件。 Google Maps Ionic 插件基本上是cordova-plugin-googlemaps 的封装。我已按照presentation 中提到的步骤进行操作。

我无法在 ID 为 map_canvas 的元素中显示地图,该元素位于页面 html 之一中。到目前为止,这是我尝试过的:

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { GoogleMaps, GoogleMap, Marker } from '@ionic-native/google-maps';


@IonicPage()
@Component({
  selector: 'page-step-two',
  templateUrl: 'step-two.html',
})
export class StepTwoPage {

  private stepTwoForm: FormGroup;
  private map: GoogleMap;

  constructor(private formBuilder: FormBuilder) {
    this.stepTwoForm = this.formBuilder.group({
      prename: ['', Validators.required],
      name: ['', Validators.required],
      email: ['', Validators.required],
      mobile: ['', Validators.required],
      yearLiving: ['', Validators.required],
    });
  }

  ionViewDidLoad() {
    // Create a map after the view is ready 
    // and the native platform is ready.
    this.loadMap();
  }

  loadMap() {
    this.map = GoogleMaps.create('map_canvas'); // <--- Problematic statement
  }

  goToStepThree() {

  }

}

这里是页面 html:

<ion-header>
  <ion-navbar>
    <ion-title>Step - 2</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <progress-bar [stepCount]="5" [currentStep]="2"></progress-bar>

  <ion-card class="step-body-card">
    <ion-card-header>
      <h1 text-center class="card-title">Persona</h1>
    </ion-card-header>
    <ion-card-content>
      <form [formGroup]="stepTwoForm" (ngSubmit)="goToStepThree()">
        <ion-grid>
          <ion-row>
            <ion-col col-12 col-sm>
              <ion-item>
                <ion-input type="text" placeholder="Prename" formControlName="prename"></ion-input>
              </ion-item>
            </ion-col>
            <ion-col col-12 col-sm>
              <ion-item>
                <ion-input type="text" placeholder="Name" formControlName="name"></ion-input>
              </ion-item>
            </ion-col>
          </ion-row>
          <ion-row>
            <ion-col col-12 col-sm>
              <ion-item>
                <ion-input type="email" placeholder="Email" formControlName="email"></ion-input>
              </ion-item>
            </ion-col>
            <ion-col col-12 col-sm>
              <ion-item>
                <ion-input type="tel" placeholder="Mobile" formControlName="mobile"></ion-input>
              </ion-item>
            </ion-col>
          </ion-row>
          <ion-row>
            <ion-col col-12 col-sm>
              <ion-item>
                <ion-input type="number" min="0" placeholder="Year of living" formControlName="yearLiving"></ion-input>
              </ion-item>
            </ion-col>
            <ion-col col-12 col-sm>

            </ion-col>
          </ion-row>
        </ion-grid>
        <button margin-top ion-button type="submit" [disabled]="!stepTwoForm.valid">Continue</button>
      </form>
    </ion-card-content>
  </ion-card>
</ion-content>

我尝试在 Android 中运行,但它给出了一个错误,map_canvas 元素上没有显示任何内容。错误是由cordova产生的:

Error in Success callbackId: CordovaGoogleMaps1188158820 : ReferenceError: element is not defined

这是来自控制台的堆栈跟踪:

Uncaught ReferenceError: element is not defined
    at Map.<anonymous> (:8100/plugins/cordova-plugin-googlemaps/www/CordovaGoogleMaps.js:645)
    at Map.trigger (:8100/plugins/cordova-plugin-googlemaps/www/BaseClass.js:68)
    at Map.set (:8100/plugins/cordova-plugin-googlemaps/www/BaseClass.js:35)
    at Map.getMap (:8100/plugins/cordova-plugin-googlemaps/www/Map.js:152)
    at :8100/plugins/cordova-plugin-googlemaps/www/CordovaGoogleMaps.js:881
    at Object.callbackFromNative (cordova.js:291)
    at <anonymous>:1:9

我可以确认此错误是由初始化或创建地图时的语句产生的,在 page.ts 中指出为有问题的语句。我无法解决此错误的根本问题。

请帮助我解决问题并提出修复建议。

编辑
调试后我发现只有当map_canvas 元素(div)在form 内时才会发生错误,如果我将它从form 标记中取出,它会按预期工作并显示地图。

也许这是一个错误或FormBuilder 有问题。我需要在表单中显示谷歌地图,所以请帮我解决谷歌地图插件的这种奇怪行为。已编辑的问题,包括现在供参考的完整表格和简化的地图创建逻辑。

【问题讨论】:

  • this 有帮助吗?
  • @ChrisG 我已经在使用 v4.4.0 的方式来创建地图,这是有问题的说法。

标签: javascript angular ionic-framework google-maps-api-3 cordova-plugins


【解决方案1】:

更新

构建共享项目后,我无法重现错误

这个问题至少 v2.3.8 已经解决了

【讨论】:

  • 两者之间没有区别,因为create 方法接受两种形式,HTMLElement 或元素的标识符字符串。我尝试了你的建议,但没有运气。顺便说一句,这应该是评论,而不是答案。
  • 哇,真是糟糕的评论。我是 cordova-plugin-googlemaps 的作者。好吧,我建议你使用另一个地图插件。
  • 我最初使用的是您描述的方式,但它不起作用。我用更多的调试信息编辑了这个问题。我相信作为插件作者,您绝对可以提供调试信息方面的帮助,并且还记得我正在使用 Ionic 团队为此地图插件提供的 Google Maps 包装器。
  • 我无法确定问题所在,因为提供的信息太少了。请在 GitHub 上分享您的项目文件。 (创建一个可重现的项目很好)
  • 这里是这个项目的 GitHub 公共仓库:github.com/malviyaritesh/five-steps。当这个项目正在进行时,不要期望一切都能正常工作或完成。谢谢你的帮助。问题出在StepTwoPage
猜你喜欢
  • 2018-08-04
  • 2021-06-17
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2016-12-20
  • 2014-12-20
相关资源
最近更新 更多