Ошибка Ionic2 Google Maps API

Я пытаюсь использовать карту Google в своем приложении Ionic2, как описано здесь, однако в строке new google.maps.Map есть следующая ошибка, поэтому я не вижу карту на своей странице:

введите здесь описание изображения

введите здесь описание изображения

Мой app.ts

import { Component, ViewChild, provide } from '@angular/core';
import { App, ionicBootstrap, Platform, Nav, Config } from 'ionic-angular';
import { StatusBar } from 'ionic-native';
import { HTTP_PROVIDERS, Http } from '@angular/http';
import {AuthHttp, AuthConfig} from 'angular2-jwt';

import { StartPage } from './pages/start/start.component';
import { FarmList } from './pages/farmList/farmList.component';
import { Slider } from './pages/slider/slider.component';
import { ProfilePage } from './pages/profile/profile.component';

@Component({
  templateUrl: 'build/app.html',
  styleUrls: ['/app.scss'],
  providers:[
    provide(AuthHttp, {
      useFactory: (http) => {
        return new AuthHttp(new AuthConfig, http);
      },
      deps: [Http]
    })
  ]
})


export class MyApp {
  @ViewChild(Nav) nav: Nav;

  rootPage: any = Slider;

  pages: Array<{title: string, component: any, name: any}>

  constructor(private platform: Platform) {
    this.initializeApp();

    // used for an example of ngFor and navigation
    this.pages = [

      { title: 'Start', component: StartPage , name:'home' },
      { title: 'Farms', component: FarmList, name: 'list' },
      { title: 'Profile', component: ProfilePage, name: 'contact' },
    ];

  }

  initializeApp() {
    this.platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      StatusBar.styleDefault();
    });
  }

  openPage(page) {
    // Reset the content nav to have just this page
    // we wouldn't want the back button to show in this scenario
    this.nav.setRoot(page.component);
  }
}

ionicBootstrap(MyApp,[HTTP_PROVIDERS]);

Мой index.html:

<body>

  <ion-app></ion-app>

  <script src="http://maps.google.com/maps/api/js"></script>
  <!-- cordova.js required for cordova apps -->
  <script src="cordova.js"></script>
  <!-- Polyfill needed for platforms without Promise and Collection support -->
  <script src="build/js/es6-shim.min.js"></script>
  <!-- Zone.js and Reflect-metadata  -->
  <script src="build/js/Reflect.js"></script>
  <script src="build/js/zone.js"></script>
  <!-- the bundle which is built from the app's source code -->
  <script src="build/js/app.bundle.js"></script>
</body>

Мой компонент:

import { Component } from '@angular/core';
import { NavController, Platform } from 'ionic-angular';

@Component({
  templateUrl: 'build/pages/start/start.html'
})

export class StartPage {

    map:any

  constructor( private navController: NavController, private platform: Platform) {

    this.initializeMap();
  }

   initializeMap() {

        this.platform.ready().then(() => {
            var minZoomLevel = 12;

            this.map = new google.maps.Map(document.getElementById('map_canvas'), {
                zoom: minZoomLevel,
                center: new google.maps.LatLng(38.50, -90.50),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });

        });
    }   
}

Мой HTML:

<ion-navbar *navbar>
  <button menuToggle>
    <ion-icon name="menu"></ion-icon>
  </button>
  <ion-title>Start</ion-title>
</ion-navbar>


<ion-content padding class="page1">

    <div padding>
        <img src="images/icon_transperent.png" width="200"/>
    </div>

    <div id="map_canvas"></div> 

</ion-content>

Мой СКСС:

#map_canvas {
    width: 100%;
    height: 100%;
}

Что именно здесь происходит не так?

ОБНОВЛЕНИЕ: полный скриншот консоли

введите здесь описание изображения

ОБНОВЛЕНИЕ:

typings install dt~google.maps --global должен выполняться в каталоге проекта, иначе он не действует!


person Thinker    schedule 04.07.2016    source источник
comment
Не могли бы вы добавить сообщение об ошибке, которое вы получаете?   -  person sebaferreras    schedule 05.07.2016


Ответы (1)


однако в новой строке google.maps.Map есть следующая ошибка, поэтому я не вижу карту на своей странице:

Ошибка, которую вы получаете, похожа на Cannot find name google? если да, то он просто typescript жалуется на то, что ничего не знает об объекте google. Это не ошибка, ваш код должен быть транспилирован в любом случае.

Если вы не хотите получать это предупреждение, вы можете установить определение для карт Google (чтобы машинописный текст мог знать о его свойствах и методах), выполнив:

typings install google.maps --global

Что-то, что я бы изменил в вашем коде:

export class StartPage {

  // remove this line, by adding private platform : Platform as a parameter
  // in the constructor already creates an instance of the platform
  // platform : any

  // I've added the private keyword to platform, remember that setting this to
  // public / private is mandatory in the constructor, and by doing that you are
  // creating a variable called platform and asigning it the Platform object by
  // Dependency Injection.
  constructor( private navController: NavController, private platform: Platform) {

    // You don't need this because of what I say in the constructor's comment.
    // this.platform=platform

    this.initializeMap();
  }

========================================

РЕДАКТИРОВАТЬ:

Что касается новой ошибки, которую вы только что добавили, я думаю, что проблема связана с политикой безопасности контента, которую вы определяете в файле index.html. Давайте попробуем добавить очень разрешительную политику, которая по существу позволит нам загружать любые ресурсы. В зависимости от вашего приложения вы можете рассмотреть возможность предоставления более строгой политики, но открытая политика хороша для разработки:

Измените файл www/index.html, включив в него следующий метатег:

<meta http-equiv="Content-Security-Policy" content="font-src 'self' data:; img-src * data:; default-src * 'unsafe-eval' 'unsafe-inline'">
person sebaferreras    schedule 05.07.2016
comment
Есть ли какие-либо установки npm, прежде чем я даже попытаюсь использовать карты Google в Ionic? Потому что, как только я добавлю эти строки, связанные с картами Google, в компонент, мое приложение перестанет работать. - person Thinker; 05.07.2016
comment
вот это: предупреждение Google Maps API: NoApiKeys. Я также обновлю свой вопрос с помощью моего app.ts через мгновение. - person Thinker; 05.07.2016
comment
Это просто предупреждение, потому что вы не используете ключ API для загрузки карты (его можно получить здесь: developers.google.com/maps/documentation/javascript). Но Google Maps работает даже без ключа API (я использую его так же, как и вы, - без ключа API - для компонента автозаполнения, и таким образом работает нормально. Значит, ошибка должна быть где-то еще... - person sebaferreras; 05.07.2016
comment
Я снова обновил свой вопрос со скриншотом ошибки, однако я не уверен, что это та ошибка, которую мы ищем. Но на самом деле это все, что я вижу в своей консоли. - person Thinker; 05.07.2016
comment
Я обновил ответ, проверьте, решает ли это проблему. - person sebaferreras; 05.07.2016
comment
Хорошо, эта строка убрала ошибку, отлично! Но карта так и не загрузилась. Посмотрите последний снимок экрана, похоже, ошибки нет, и даже div существует на странице. Может ли это быть из-за того, что он использует «atComponent» вместо «atPage», как он использует в своем учебнике? - person Thinker; 05.07.2016
comment
Давайте продолжим обсуждение в чате. - person sebaferreras; 05.07.2016
comment
Моя ошибка: типизация install dt~google.maps --global эту команду нужно было выполнить внутри каталога проекта. Это сработало! Спасибо за такую ​​помощь! - person Thinker; 05.07.2016
comment
Отлично, приятно это слышать! Если вы не возражаете, добавьте это в свой вопрос, чтобы другие пользователи могли об этом знать. - person sebaferreras; 05.07.2016
comment
Конечно! Я сделаю это! - person Thinker; 05.07.2016