ionic2簡單分析


Angular2是一個全新的框架,它從ReactJS以及其他web移動框架借鑒了不少經驗和優點,巨大的改進使得開 發體驗和性能已經超越了Angular1,而且Ionic2無論是從UI交互效果和跨平台的差異性都優於Ionic1

1. 安裝使用

ionic2的安裝運行基本和前版本的ionic基本一致,非常簡單。

npm install -g ionic # 安裝ionic工具集

ionic start projectName --v2 # --v2表示使用ionic2 + angular2的組合方式創建項目,否則使用ionic + angular創建項目,此時ionic會下載所需要的相關包

cd projectName # 進入創建的項目名稱目錄

ionic serve # 啟用瀏覽器調試應用頁面,這時通過瀏覽器打開默認端口頁面http://localhost:8100/#/tab/dash就可以打開應用頁面了

2. 和ionic的區別

ionic2是建立在angular 2上的,angular 2推薦使用typescript進行項目的開發,所以到了ionic2,就可以這樣來開發我們的項目了。一般情況下,我們創建應用完成后,www/目錄為我們頁面的源代碼。其目錄結構如下:

+ www/
    + css/
    + img/
    + js/
    + lib/
    + templates/
    + index.html
    + manifest.json
    + service-worker.js

我們以www/js/app.js為例。

// 入口JavaScript文件,配置頁面路由與加載的視圖
// ionic版本寫法 .config(function($stateProvider, $urlRouterProvider) { $stateProvider.state('tab', { url: '/tab', abstract: true, templateUrl: 'templates/tabs.html' }).controller('MainCtrl', function($scope){ $scope.data ={ text: 'Hello World' } } ) }); // ionic 2寫法 @Component({ templateUrl:'main/main.html' }); export class MainCmp { constructor(){ this.data ={ text: 'Hello World' } } }

templates/tabs.html的內容如下。

<ion-content ng-controller="MainCtrl"> <ion-item> </ion-item> </ion-content>

ionic2里面里可以這樣來適應原來的版本:

<ion-content ng-controller="MainCtrl as main"> <ion-item> </ion-item> </ion-content>

值得注意的是,這里 <ion-content> 等為ionic-angular提供的組件模塊,它類似於Webcomponent的方式,能被angular識別解析。通俗的理解就是一個類似bootstrap的UI組件庫。

3、組件

ionic2除了提供統一便捷式APP打包的解決方案,還提供了一個用於移動端的UI組件庫。其實類似的組件庫有很多,bootstrap、frozenui、wui等等,但是與其它框架提供UI組件不同的是,ionic2提供的組件規范是面向未來Webcomponent的方式實現的。

例如對於一個對話框組件,一般的UI框架可能這樣來實現,相信類似的框架大家多少用過。這里以frozenui為例,一般通過對元素添加不同的class名稱來控制組件的樣式和顯示,而像 ui-dialog 這些類名是UI庫統一定義好的。

<div class="ui-dialog"> <div class="ui-dialog-cnt"> <header class="ui-dialog-hd ui-border-b"> <h3>新手任務</h3> <i class="ui-dialog-close" data-role="button"></i> </header> <div class="ui-dialog-bd"> <h4>標題標題</h4> <div>這是標題的內容!</div> </div> <div class="ui-dialog-ft"> <button type="button" data-role="button">取消</button> <button type="button" data-role="button">開通</button> </div> </div> </div> <script class="demo-script"> $(".ui-dialog").dialog("show"); </script>

但是使用ionic2,你可能會這樣來使用,在這里,我們沒有去對模塊元素添加一些樣式的類,因為angular2將自定義組件標簽 ion-header 對應的CSS已經通過Webcomponent的形式引入了,那么我們只用管怎樣使用結構層結構就可以了,但是這里注意的是 primary block 等類名沒有添加到class中。

<ion-header> <ion-navbar> <ion-title>Confirm</ion-title> </ion-navbar> </ion-header> <ion-content padding> <button primary block (click)="doConfirm()">確認對話框</button> </ion-content> <script> import { AlertController } from 'ionic-angular'; export class MyPage { constructor(public alertCtrl: AlertController) {} showConfirm() { let confirm = this.alertCtrl.create({ title: '標題標題', message: '這是標題的內容', buttons: [{ text: '取消', handler: () => { console.log('取消'); } }, { text: '確定', handler: () => { console.log('A確定'); } }] }); confirm.present(); } } </script>

其它的相關組件的方式類似,同時你也可以去自定義遵循Webcomponent的element 組件。

更多API: http://ionicframework.com/docs/v2/components/#alert-prompt

4.模板的語法結構

ionic2的模板語法與Ionic1非常相似,但是看起來又有點古怪,其實Ionic2的模板語法更為簡潔。我們來看一下對比。

  • ionic1:

<img ng-src="{{photo.image}}" />
  • ionic2:
<img [src]="photo.image" />

我們看一下 事件調用:

  • ionic1:
<button ng-click="doSomething()">
  • ionic2:

<button (click)="doSomething()">

5.它僅僅是javascript而已

ionic1和angular1都有一些特定的語法,但是追其根本只不過是javascript

但是從使用上,EM6/ TS能夠讓你避免很多問題,比如說:

  • jsvascript:

this.someData = null; var me = this; doSomething(function(data){ me.someData = data; });

看到了么?你問了使用this指針,不得不在函數外面作為變量me的引用,但是你使用了EM6:

this.someData = null; doSomething((data) => { this.someData = data; })

6、native交互

當然,ionic2還提供了與Native客戶端的相互調用能力,前端相關的一套JavaScript調用庫被稱為Ionic Native。如果在你的APP需要調用Native調用能力。現需要安裝引入對應的模塊,一邊在分析打包時引入。

npm install ionic-native --save

調用時就可以這樣來使用。

import {Geolocation} from 'ionic-native'; Geolocation.getCurrentPosition().then(pos => { console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude); }); let watch = Geolocation.watchPosition().subscribe(pos => { console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude); }); // to stop watching watch.unsubscribe();

使用ionic2也可以使用ES6+的方式來實現。

// ES6 / TypeScript / Ionic 2 / Angular 2
import {Camera} from 'ionic-native'; this.platform().then(() => { Camera.getPicture().then( res => console.log("We have taken a picture!"), err => console.error("Error taking picture", err) ); });

具體更多API: http://ionicframework.com/docs/v2/native/

7、主題與圖標

如果你需要改變ionic2 UI組件庫的顯示風格,你也可以自定義自己的APP樣式。方法也很簡單,ionic2 的UI組件庫樣式引用了通用的樣式變量,在 app/theme/app.variables.scss 里面修改響應的顏色和字體值就可以了。這點和其它UI框架是一樣的。當然你也可以修改保存多個主題風格的變量文件,以供選擇使用。

$colors: ( primary: #387ef5; secondary: #32db64; danger: #f53d3d; light: #f4f4f4; dark: #222; );

對於圖標的話就沒什么講的了,和fontawsome一樣,ionic2給了UI框架自帶的可選圖標,大家可以根據下面的文檔說明選擇使用。

圖標參考: http://ionicframework.com/docs/v2/ionicons/

8、總結

總結來看,ionic2不僅為我們提供了打包前端頁面應用的解決方案,還為我們提供了一整套的UI組件庫,而且組件均使用Web Component規范來實現,開發體驗有了較好的改善。

更多API: http://ionicframework.com/docs/v2/

 


免責聲明!

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



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