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;

即可正常顯示地圖了:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM