在typescript类中创建Google Map实例

时间:2012-11-19 16:45:25

标签: google-maps typescript

您好我是Typescript和Javascript的新手,我在创建googlemap实例时遇到了一些问题。

我已经下载了google.maps.d.ts声明文件并将其导入我的打字稿类,所有intellisense工作正常等等;

import googleMaps = module("google.maps"); 
module Mapping {
    export class GoogleMap implements IMap {

        public name: string;
        private map: any;
        private options: any;

        constructor (mapDiv:Element) {
            this.name = "GoogleMap";
            this.options = { zoom: 3, MapTypeId: 'terrian' };
            this.map = new googleMaps.google.maps.Map(mapDiv, this.options);
         }
    }
}

当我尝试在index.cshtml文件中创建此类时;

<!DOCTYPE html>
<html>
    <head><title>TypeScript Mapping</title></head>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?    key=MYKEYGOESHERE&sensor=false"></script>
    <script type="text/javascript" src="~/scripts/require.js"></script>
    <script type="text/javascript" src="~/typings/Mapping.js"></script>
    <script type="text/javascript">
        function initialize() {

            var mapCanvas = document.getElementById("map");

            var googleMap = new Mapping.GoogleMap(mapCanvas);
        }
    </script>
<body onload="initialize()">
<div id="map" style="height: 512px; width: 512px;"></div>

我收到以下错误;

Microsoft JScript运行时错误:模块名称&#34; google.maps&#34;尚未加载上下文:_。使用require([])

为了加载googlemaps api我缺少什么?

提前致谢。

2 个答案:

答案 0 :(得分:13)

由于您在网页上将Google地图作为script标记加入,​​因此您可能不想使用模块加载程序将其加载。

所以我会替换:

import googleMaps = module("google.maps"); 

使用

/// <reference path="./google.maps.d.ts" />

引用对TypeScript&#34说;我将确保此脚本在运行时可用&#34;。

import语句说&#34; Go并在运行时为我加载此脚本&#34;。

答案 1 :(得分:0)

我喜欢创建一个叫shim函数的东西,让我可以使用窗口变量/对象(比如google)。我创建了.ts文件:

// -- Shim.ts:

/**
 * Loads variable from window according to
 * the name parameter.
 * 
 * @export
 * @param {string} name
 * @returns {*} window[name]
 */
export function shim(name: string): any {
    let global: any = window;
    return global[name];
}

我的基本设置看起来不像:

- main.ts
-- shims
-- -- Shim.ts
-- -- Google.ts
-- -- Swiper.ts
-- -- ... .ts

而Google.ts不仅仅是使用以下功能:

// -- Google.ts

import { shim } from '../shims/Shim';

/**
 * Loads variable from window with the
 * name 'google'
 * 
 * @export
 * @returns {*} window['google']
 */
export let google = shim('google'); 

如果您想要使用谷歌变量,只需将其包括在内:

import { google } from '../shims/Google';

也许还可以查看typings - Typings是管理和安装TypeScript定义的简单方法 - 这对我帮助很大。

我目前正在编写另一个Typescript Google Maps Setup,并考虑与社区分享。

您可以使用以下链接查看:https://github.com/DominikAngerer/typescript-google-maps