Ionic2系列——在Ionic2中使用高德地图
之前讲过了如何在Ionic2中使用第三方库,因为第三方库必须针对TypeScript提供相应的声明文件——即d.ts文件,才能被TypeScript正确识别并编译。好在大多数的第三方库已经有了定义文件,可直接通过以下命令安装:
npm install @types/theLibraryName --save
这样就可以解决大多数第三方库的引入问题,如上一篇博客中提到的ECharts组件。
那么如果某个第三方库没有对应的d.ts怎么办呢?除了自己手写d.ts之外,TypeScript也提供了一种比较宽泛的方式来识别js代码中的变量及方法,但是缺点是失去了智能感知的特性。比如要使用高德地图的SDK,经查看高德地图的文档:http://lbs.amap.com/api/javascript-api/summary/ ,发现使用方法是这样的:
第一步,注册高德开发者;第二步,去控制台创建应用;第三步,获取Key。
接下来需要引入高德地图SDK的JS:
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=您申请的key值"></script>
这个js是动态加载的,npm中也没有对应的d.ts,如果按照文档下面的步骤直接使用AMap对象,就会编译失败,找不到这个对象。所以在使用AMap之前,必须声明它。下面演示一下在Ionic2中使用高德地图SDK的方法。
一、新建Ionic2应用并引入高德JS
首先新建一个Ionic2应用。使用以下命令来创建一个新项目:
ionic start MapDemo --v2
打开src目录下的index.html, 在head标签中添加以下代码,引入js:
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=您申请的key值"></script>
注意,该js必须放在以下代码的前面:
<script src="build/main.js"></script>
不然在使用的时候还没找到AMap对象,还是会报错。
二、创建地图容器
打开home.html,在home页面里你想展示地图的地方创建一个div 容器,并指定id标识:
<div id="container"></div>
给地图容器指定大小,可以使用CSS为地图容器设置合适的大小,比如:
#container {width:300px; height: 180px; }
也可以直接写:
<div id="container" style="height: 600px;"></div>
三、声明AMap对象并创建地图
打开home.ts,在构造函数前添加一个变量:
public map: any;
TypeScript中any真是个很有用又没那么好用的东西,任何不知道具体类型的东西都可以声明为any类型,但是这样就失去了智能感知的特点。没办法这里只能声明为any了。接下来添加一个loadMap方法:
loadMap() {
this.map = new AMap.Map('container', {
resizeEnable: true,
zoom: 8,
center: [116.39,39.9]
});
}
并调用该方法:
ionViewDidLoad() {
this.loadMap();
}
如果这时候编译的话,就会报错,找不到AMap对象,TypeScript不认识这个东西。所以需要对其进行声明。
打开src目录下的declarations.d.ts文件,这里就是写类型定义的地方,里面有一段注释,大意如下:
声明文件是TypeScript编译器如何知道一个对象的类型的方式。它们将让TypeScript认识所有的代码并提供智能感知。
下面声明的通配符* 模块允许在App中使用第三方库,即使它们没有提供类型声明文件。
我们可以把高德JS的声明写在这里。在下面添加以下代码:
declare var AMap;
即可正常显示地图了:

Ionic2系列——在Ionic2中使用高德地图的更多相关文章
- Vue-Cli 3.0 中配置高德地图
vue 中使用高德地图有两种方式 一.vue-amap 组件 官网: https://elemefe.github.io/vue-amap/#/ 开始的时候是打算用这个组件做地图功能的,但是尝试之后存 ...
- Vue组件篇——Vue3.0中使用高德地图
VUE-CLI 3.0 中配置高德地图 在项目开发中,地图组件 1.首先,需要注册高德开放平台的账号,并在[应用管理]页面[创建新应用],为应用添加Key值 高德开放平台:https://lbs.am ...
- reactjs中使用高德地图计算两个经纬度之间的距离
第一步下载依赖 npm install --save react-amap 第二步,在组件中使用 import React, { Component } from 'react' import { L ...
- react中使用高德地图的原生API
干货,无话 1.react-create-app,创建新react项目 2.npm install react-amap,引入高德地图的封装 3.编写组件index.js import React f ...
- vue-cli2.X中引入高德地图,将其设为全局对象
平时一般未用脚手架构建或用webpack构建的项目只要用script标签引入即可,在vue-cli 2.X构建的项目中,需要用如下方式引入高德地图: 首先在高德地图开放平台中注册开发者账号并获取key ...
- 在vue中使用高德地图vue-amap
1.安装 vue-amap我安装指定版本0.5.10的版本 npm i --save vue-amap@0.5.10 2.main.js中的配置 key申请地址教程:https://lbs.amap. ...
- 在vue中使用高德地图开发,以及AMap的引入?
百度引入BMap ,一个import 即可,可AMap 却报AMap is not difined ? 1.首先在 externals: { "BMap": "BMap& ...
- Ionic2系列——在Ionic2中使用ECharts
在群里看到有人问怎么在Ionic2中集成ECharts来显示图表.当时答应说写个blog,简单写下步骤. 在TypeScript中如果要使用第三方库,必须要有d.ts,也就是定义文件,没有这个文件的话 ...
- android: 在APP中显示高德地图SDK
一.搭建环境 参考资料:http://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project ...
随机推荐
- python基础课程_学习笔记20:标准库:有些收藏夹——os
标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...
- 从PHP官网被攻击,到熟悉SSL(安全链路层)
近日,php官网php.net网站受到恶意攻击,攻击者至少破坏了2个服务器.PHP工作组不得不重置用户密码. PHP工作组在随后的调查发现,攻击者成功的对网站注入了恶意的JavaScript代码,这个 ...
- 学习PHP时的一些总结(四)
目录的基本操作: 在系统的每个目录下都有两个特殊的目录"."和".." , 分别指示当前目录和当前目录的父目录. dirname() 返回目录的名称 path ...
- avalon.js实现一个简易日历
使用MVVM框架avalon.js实现一个简易日历 最近在做公司内部的运营管理系统,因为与日历密切相关,同时无需触发条件直接显示在页面上,所以针对这样的功能场景,我就用avalon快速实现了一个简 ...
- jQuery无限级联下拉框插件
自己编写jQuery插件 之 无限级联下拉框 因为是级联,所以数据必须是树型结构的,我这里的测试数据如下: 看下效果图: 1.>图一: 2.>图二: 3.>图三: 由图可知,下拉 ...
- MVC Filter 实现方式和作用范围控制
Asp.Net MVC Filter 实现方式和作用范围控制 MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是 ...
- VIJOS1107 求树的最长链
vijos1107环游大同80天 学习了一下求树的最长链的方法 最简单的思路就是两次dfs 两次dfs分别有什么用呢? 第一次dfs,求出某个任意的点能到达的最远的点 第二次dfs,从所搜到的最远的点 ...
- 指定url和深度的广度优先算法爬虫的python实现
本文参考http://zoulc001.iteye.com/blog/1186996 广度优先算法介绍 整个的广度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的"子节点"( ...
- UNIX系统接口
UNIX系统接口 8.1 文件描述符 UNIX操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件.系统通过文件描述符来标识文件:标准输入为0,标准输出为1,标准错误为2. 当程序 ...
- 【NET】Winform用户控件的初步封装之编辑控件
编辑控件 public abstract partial class TEditorBase <TEntity, TRepository, TSqlStrConstruct> : User ...