Ionic2 開發(fā)總結(jié)

痛點(diǎn)在于開發(fā)環(huán)境吧寸五,base app的下載和gradle編譯都需要較好的外網(wǎng)環(huán)境

環(huán)境準(zhǔn)備

  • npm install -g cordova ionic
  • ionic start myApp --v2 --skip-npm靶瘸,這一步是從git上拉取項(xiàng)目模板等舔,內(nèi)網(wǎng)環(huán)境下是無法下下來的魁瞪, --v2是下載ionic2版本, --skip-npm是因?yàn)橄峦昴0搴骾onic會(huì)自動(dòng)npm install丽柿,跳過這部然后自己手動(dòng)用cnpm下載
  • cd myApp
  • ionic serve -lc飞袋,ionic提供的瀏覽器調(diào)試,一開始一直不成功句各。多次新建項(xiàng)目下載重試后吸占,成功...還是網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致的吧,-lc是ionic lab凿宾,該頁(yè)面可以同時(shí)調(diào)試在Android矾屯、IOS和WP設(shè)備上的樣式;
  • ionic platform add android菌湃,添加android平臺(tái)下的項(xiàng)目結(jié)構(gòu)问拘,在platforms文件夾下。
  • ionic build android, ionic run android -lc惧所,編譯和在真機(jī)上運(yùn)行骤坐,-lc類似serve下的-lc,可以實(shí)時(shí)在真機(jī)上調(diào)試;

gradle 配置

  • ionic build android是通過gradle編譯下愈,而且會(huì)在線下載gradle纽绍,墻內(nèi)基本是下不了的,這就需要手動(dòng)下載項(xiàng)目需要的gradle版本势似。 查看android platform下的build.gradle文件拌夏,看當(dāng)前版本需要的gradle version。 下載成功后履因,放在myApp\platforms\android\gradle文件夾下障簿, 命令行輸入set CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=../gradle-2.14.1-all.zip
  • maven下載失敗問題。替換為阿里云鏡像:
    打開項(xiàng)目\platforms\android\build.gradle修改:
repositories {
//mavenCentral() // 注釋掉
jcenter()
flatDir {
dirs 'libs'
}
maven {
url "http://maven.aliyun.com/nexus/content/groups/public"
}
}

Ionic2 使用

  • Ionic2添加頁(yè)面模板
    ionic g page xxx

  • 頁(yè)面跳轉(zhuǎn)
    引入 import {NavController} from 'ionic-angular'
    在類中通過push和pop方法跳轉(zhuǎn)或返回上個(gè)頁(yè)面:
    this.navCtrl.push(demoPage);
    this.navCtrl.pop()

  • 頁(yè)面間的參數(shù)傳遞
    引入import {NavParams} from 'ionic-angular'
    跳轉(zhuǎn)時(shí)傳入?yún)?shù): this.navCtrl.push(demoPage, {item: 'value'})
    跳轉(zhuǎn)后的頁(yè)面通過get方法獲取值: let temp = this.navParams.get('item')

  • select/radioGroup的默認(rèn)選擇問題
    官方文檔中給出的方法是在html中使用屬性selected="true"/ checked="true";
    目前來看該方法不起作用栅迄,查看issue站故,發(fā)現(xiàn)需通過ngModel綁定變量,設(shè)定變量的初始值毅舆。

  • 搜索框

<ion-searchbar (ionInput)="getItems($event)"></ion-searchbar>
<ion-list>
  <ion-item *ngFor="let item of items">
    {{ item }}
  </ion-item>
</ion-list>

@Component({
  templateUrl: 'search/template.html',
})
class SearchPage {

  searchQuery: string = '';
  items: string[];

  constructor() {
    this.initializeItems();
  }

  initializeItems() {
    this.items = [
      'Amsterdam',
      'Bogota',
      ...
    ];
  }

  getItems(ev: any) {
    // Reset items back to all of the items
    this.initializeItems();

    // set val to the value of the searchbar
    let val = ev.target.value;

    // if the value is an empty string don't filter the items
    if (val && val.trim() != '') {
      this.items = this.items.filter((item) => {
        return (item.toLowerCase().indexOf(val.toLowerCase()) > -1);
      })
    }
  }
}
  • ionic2頁(yè)面切換數(shù)據(jù)不刷新
    在tabs模板下西篓,切換頁(yè)面,初始化的方法只會(huì)執(zhí)行一次憋活,但一些動(dòng)態(tài)從服務(wù)器獲取的數(shù)據(jù)是希望每次進(jìn)入頁(yè)面時(shí)都重新獲取刷新的岂津,這就需要對(duì)ionic的頁(yè)面生命周期有一定了解,可以將數(shù)據(jù)請(qǐng)求刷新的方法放在ionViewWillEnter中悦即。ionic2的生命周期如下:
事件名稱 事件說明
ionViewDidLoad 頁(yè)面加載完畢觸發(fā)吮成。該事件發(fā)生在頁(yè)面被創(chuàng)建成 DOM 的時(shí)候橱乱,且僅僅執(zhí)行一次。如果頁(yè)面被緩存(Ionic默認(rèn)是緩存的)就不會(huì)再次觸發(fā)該事件赁豆。該事件中可以放置初始化頁(yè)面的一些事件仅醇。
ionViewWillEnter 即將進(jìn)入一個(gè)頁(yè)面變成當(dāng)前激活頁(yè)面的時(shí)候執(zhí)行的事件。
ionViewDidEnter 進(jìn)入了一個(gè)頁(yè)面且變成了當(dāng)前的激活頁(yè)面魔种,該事件不管是第一次進(jìn)入還是緩存后進(jìn)入都將執(zhí)行析二。
ionViewWillLeave 將要離開了該頁(yè)面之后變成了不是當(dāng)前激活頁(yè)面的時(shí)候執(zhí)行的事件。
ionViewDidLeave 在頁(yè)面完成了離開該頁(yè)面并變成了不是當(dāng)前激活頁(yè)面的時(shí)候執(zhí)行的事件节预。
ionViewWillUnload 在頁(yè)面銷毀和頁(yè)面中有元素移除之前執(zhí)行的事件叶摄。
ionViewDidUnload 在頁(yè)面銷毀和頁(yè)面中有元素移除之后執(zhí)行的事件
  • 阻止點(diǎn)擊事件傳遞方法
    (click)="do(); $event.stopPropagation()"

  • 修改應(yīng)用圖標(biāo)和啟動(dòng)畫面

    1. 找到合適的圖標(biāo)文件,png格式
    2. 替換項(xiàng)目resources文件夾下的icon.png
    3. 項(xiàng)目路徑下運(yùn)行ionic resources命令安拟,該命令為所有platform生成對(duì)應(yīng)分辨率的圖片
    4. 若想針對(duì)不同platform使用不同圖標(biāo)蛤吓,圖片復(fù)制到resources下對(duì)應(yīng)platform文件夾下,再運(yùn)行ionic resources

ionic resources對(duì)應(yīng)的服務(wù)似乎不太穩(wěn)定糠赦,也可以通過在線網(wǎng)站圖標(biāo)工廠

  • 修改應(yīng)用名稱
    修改根目錄下config.xml文件:
    <widget id="com.ionframework.demo">会傲,id對(duì)應(yīng)應(yīng)用的包名
    <name></name>對(duì)應(yīng)應(yīng)用名稱,直接修改Android的values文件沒有效果

  • 解決Splash后出現(xiàn)短暫白屏問題
    修改config.xml
    添加 <preference name="AutoHideSplashScreen" value="false"/>
    注釋掉 <preference name="SplashScreenDelay" value="3000"/>

  • 關(guān)于crosswalk
    crosswalk是針對(duì)安卓設(shè)備的一個(gè)webview插件拙泽,性能較好淌山,目前ionic2的demo里不會(huì)自帶crosswalk。官方的說法是它們發(fā)現(xiàn)只有在低于4.x.x的安卓系統(tǒng)上顾瞻,ionic應(yīng)用運(yùn)行性能不穩(wěn)定泼疑,而4.x.x的設(shè)備在Google的統(tǒng)計(jì)里,全球只有不到11%荷荤。

Angular2雙向綁定

ngModule

<ion-input type="text", [(ngModule)]="inputTN"></ion-input>

ts文件中
private inputTN;
let tn = this.inputTN;

需要先定義變量名退渗。

Angular2依賴注入

在自定義了一個(gè)http服務(wù)類后,頁(yè)面中引用方法報(bào)錯(cuò)蕴纳,原因是沒有給服務(wù)類添加注解@Injectable()会油,@Injectable()標(biāo)志著一個(gè)類可以被一個(gè)注入器實(shí)例化;通常來講,在試圖實(shí)例化一個(gè)沒有被標(biāo)識(shí)為@Injectable()的類時(shí)候,注入器將會(huì)報(bào)告錯(cuò)誤

Ionic2引入第三方j(luò)s庫(kù)

應(yīng)用中想實(shí)現(xiàn)一個(gè)頁(yè)面,進(jìn)入時(shí)顯示根據(jù)設(shè)備uuid生成的二維碼古毛,雖然barcodescanner可以實(shí)現(xiàn)生成二維碼钞啸,但會(huì)打開一個(gè)Activity,這樣體驗(yàn)不符合需求喇潘。于是想到引用第三方的js庫(kù),如qrcode.js等梭稚。
然而Ionic2使用typescript颖低,ts中是無法直接調(diào)用js的。這里網(wǎng)上給出了兩種方案弧烤。

  1. 引入js文件忱屑,通過declarations.d.ts文件聲明引用變量蹬敲。
  2. 通過types庫(kù)下載qrcode。

方案2并沒有成功莺戒,方案1的具體過程以qrcode為例伴嗡,如下:

  1. 從github下在需要的js文件,jquery.min.jsqrcode.js
  2. 文件復(fù)制到項(xiàng)目'/src/assets/js'目錄下从铲,js目錄是自己新建的
  3. 在index.html中引入:
    <script src="assets/js/jquery.min.js"></script> <script src="assets/js/qrcode.min.js"></script>
  4. 在src目錄下的declarations.d.ts中申明qrcode的方法變量:
    declare var QRCode;
  5. 完成以上步驟后瘪校,就可以在ts中調(diào)用qrcode的方法,例如在頁(yè)面上顯示一個(gè)文本轉(zhuǎn)換的二維碼:
    <div id="qrImage" class="qrcode-image"></div>
    let qrImage = document.getElementById('qrImage'); new QRCode(qrImage, 'test');

獲取設(shè)備分辨率

window.screen.width * window.devicePixelRatio; window.screen.height * window.devicePixelRatio;

隱藏滾動(dòng)條

發(fā)現(xiàn)在部分設(shè)備上會(huì)顯示滾動(dòng)條名段,解決方法:修改app.sccs阱扬,添加如下代碼:

::-webkit-scrollbar {  
  display: none !important;  
}  

編譯

ionic build android --prod --release, --prod是壓縮模式伸辟,編譯出來的app啟動(dòng)速度變快麻惶,減少splash時(shí)間
--release是簽名打包,具體可見Ionic2 安卓簽名打包;
Ios有一特殊的地方信夫,正常編譯出來的都是.app文件窃蹋,需要導(dǎo)入ITouch中生成ipa。后來發(fā)現(xiàn)静稻,使用ionic run ios --prod安裝到真機(jī)時(shí)警没,/ios/build/下會(huì)多出device目錄,該目錄下有現(xiàn)成ipa姊扔,省去iTouch這一步惠奸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恰梢,隨后出現(xiàn)的幾起案子佛南,更是在濱河造成了極大的恐慌,老刑警劉巖嵌言,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗅回,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡摧茴,警方通過查閱死者的電腦和手機(jī)绵载,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苛白,“玉大人娃豹,你說我怎么就攤上這事」喝梗” “怎么了懂版?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躏率。 經(jīng)常有香客問我躯畴,道長(zhǎng)民鼓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任蓬抄,我火速辦了婚禮丰嘉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚷缭。我一直安慰自己饮亏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布峭状。 她就那樣靜靜地躺著克滴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪优床。 梳的紋絲不亂的頭發(fā)上劝赔,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音胆敞,去河邊找鬼着帽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛移层,可吹牛的內(nèi)容都是我干的仍翰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼观话,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼予借!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起频蛔,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤灵迫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后晦溪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瀑粥,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年三圆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狞换。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舟肉,死狀恐怖修噪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情路媚,我是刑警寧澤割按,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站磷籍,受9級(jí)特大地震影響适荣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜院领,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一弛矛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧比然,春花似錦丈氓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至饮怯,卻和暖如春闰歪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓖墅。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工库倘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人论矾。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓教翩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贪壳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饱亿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容