Мы получили производственную площадку, бегая Aurelia с внедренным Google Maps (https://farmtracksa.com) и в настоящее время используют наш собственный компонент для управления вложением Карт Google на странице (и отображения карты через DI на остальные наши страницы и компоненты).
Наш сайт написан на машинопись и наш контроль Google Maps разбивается на службу и компонентов, а именно:
import { autoinject } from "aurelia-framework";
@autoinject
export class GoogleMaps {
constructor() {
this.initialized = new Promise<void>((resolve, reject) => {
this.onInitialized = resolve;
this.onInitializationFailed = reject;
});
}
map: google.maps.Map = null;
initialized: PromiseLike<void>;
private onInitialized:() => void;
private onInitializationFailed: (err: Error) => void;
initialize(element: Element) {
this.map = new google.maps.Map(element, {});
this.onInitialized();
}
}
И контроль, который можно встроить в ваш взгляд.
import {bindable, autoinject, inlineView, bindingMode, customElement,
inject} from "aurelia-framework";
import {DOM} from "aurelia-pal";
@inlineView("<template></template>")
@bindable({
name: "zoom",
changeHandler: "onZoomChanged",
defaultBindingMode: bindingMode.twoWay,
defaultValue: 17
})
@bindable({
name: "latitude",
changeHandler: "onCenterChanged",
defaultBindingMode: bindingMode.twoWay,
defaultValue: -34.1996316
})
@bindable({
name: "longitude",
changeHandler: "onCenterChanged",
defaultBindingMode: bindingMode.twoWay,
defaultValue: 19.0268722
})
@customElement("google-maps")
@inject(DOM.Element, GoogleMaps)
export class GoogleMapsControl {
static map: google.maps.Map = null;
constructor(private mapElement: Element, public googleMaps: GoogleMaps) {
}
bind() {
}
attached() {
this.googleMaps.initialize(this.mapElement);
this.googleMaps.map.setCenter(new google.maps.LatLng(this.latitude, this.longitude));
this.googleMaps.map.setZoom(this.zoom);
this.onCenterChanged();
}
changing = false;
zoom = 17;
latitude = -34.1996316;
longitude = 19.0268722;
onZoomChanged() {
this.googleMaps.map && this.googleMaps.map.setZoom(this.zoom);
}
onCenterChanged() {
this.googleMaps.map && this.latitude && this.longitude && this.googleMaps.map.setCenter({ lat: this.latitude, lng: this.longitude });
}
}
Вы бы затем вставлять его в представлении, как это:
<template>
<require from="./google-maps"></require>
<google-maps zoom="7"></google-maps>
</template>
Наконец, вы также должны убедиться, что вы загрузки API Карт Google в вашем веб-приложение. Я выполнил это, разместив следующий фрагмент (от Google Maps Docs) в моем index.html
файле, так как я использовал карты во всем приложении.
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
Вы хотите, чтобы убедиться, что скрипт Google Maps был загружен, прежде чем пытаться инициализировать GoogleMaps
элемент на странице, неспособность сделать это приведет к ошибкам в вашей консоли разработчика.
Этот вопрос был очень давно, я честно не помню и не проект больше. Задайте новый вопрос, может быть, у кого-то будет ваш ответ. – nicovank
ОК и спасибо, что нашли время ответить. –