用ionic快速開發hybird App(已附源碼,在下面+總結見解)

用ionic快速開發hybird App(已附源碼,在下面+總結見解)

?

1.ionic簡介

ionic 是用于敏捷開發APP的解決方案。核心思路是:利用成熟的前端開發技術,來寫UI和業務邏輯。也就是說,就是一個H5網站,這個區別于react-native,native。即是:“寫一次,到處運行”。從去年到現在,也是紅得發紫,很多APP相繼噴薄而出,至今也見過學多做得非常好的APP,當然,是指在iOS的機器上體驗到的。android不敢恭維。簡介參見官網:
http://cordova.apache.org/
http://ionicframework.com/

ionic其實是cordova的升級版,所以在使用的時候,很多命令都是相似的,而且,涉及到插件的開發,也是使用cordova的命令,具體開發后面介紹。

?

2.ionic安裝

安裝教程也非常簡單,幾條命令,可能會讓人奔潰的,就是GWF。
我能提供的解決思路,就是:cnpm(淘寶鏡像等鏡像方式),vpn.vps.甚至肉身FQ.....然后get start:http://ionicframework.com/getting-started/

?

3.ionic初步使用調試,源碼查看:https://github.com/wfxiaolong/ionic-social-app?覺得有幫助的話,記得star.

1.如果ionic run 出來了 hello world那么恭喜你,可以考慮看下面的內容了.(還沒到這步的同學,就只能快速當做小說一樣的看下面的東西了)
2.接下來,要做的,就是常規的學習方式,看文檔。遵循原生的CSS,JS組件,一些特別的provide,看著官網的一些小例子,甚至別人寫得代碼,然后參考著運行。就可以快速寫出好看的界面,以及處理一些基本的邏輯了,加上網絡請求,寫兩個小接口,登陸注冊用戶系統來一套,商品電商來一套....然后xxx,當當當的,不到兩天,一個小應用就出來了。下面的圖片演示:(長得好看,大部分是因為ionic的自帶的UI空間設計得好...)
3.調試:
讀者可以試一下命令行:ionic serve -lc,這是ionic提供的一種調試模式。也就是:-l -c. 原話是:You can always run it from the command line using the live-reload and console flag.
a.在web端的效果會變成:
非常的性感!

b.如果是android機器,運行:ionic run android -lc.會發現android上面的web頁面變成的遠程電腦上地址。意味著你可以直接改代碼,然后andorid上面會動態更新頁面(即自動執行刷新F5),其實都是對代碼的監控和watchman一樣的邏輯。輪詢...這個功能真的太方便了!!!天啊,我之前還笨笨的自己電腦搭建一個web serve,然后手動修改工程目錄下的route文件,利用自帶的路徑攔截(route的裝飾器模式)重定向所有的資源請求....
c.iOS的真機事實調試上:哈哈,反正我沒在真機上成功過,模擬器一直沒有更新...已經跳過。但是這里可以使用一種取巧的方式:就是直接用UC瀏覽器,二維碼掃描上面的運行ionic run android -lc后生成的URL...調試UI也是沒有問題的...
d.還有官網推薦的兩種奇怪的(一點都不好用)真機調試方式:chrome 和safari的開發工具,搜搜設備,同一局域網下動態監聽web內容...

如果掌握了上面的調試模式,寫ionic項目將會變得非常平躺,舒服!不管是哪個平臺!

?

?4.ionic進階:插件開發,源碼參考:https://github.com/wfxiaolong/ionic-plugin-damaiwechat

前言:ionic的插件開發是挺煩人的.如果你想自己開發插件,一定要認真看完下面的教程。
官方教程:http://ngcordova.com/docs/install/ https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#plugin
這里就可以直白的看出來,ionic是繼承自cordova的......
先直接上簡單的開發教程,讀者按照下面的步驟,都可以開發出一個hello world的插件:
1.使用plugman工具生成模板代碼:
  a.install?plugman
  b.plugman create --name helloWord --plugin_id com.plugin.helloWorld --plugin_version 1.0.0? //生成插件
會快速生成下面的目錄結構:│- plugin.xml     // 插件的配置腳本,可以實現各種操作,例如xcode plist中添加type,項目中添加lib等各種操作,甚至提示<info>什么的..
├─src         // android以及iOS工程文件的存放目錄
└─www
  │-helloWord.js  // 暴露出來,在ionic上使用的直接接口
  c.plugman platform add --platform_name ios       //src目錄下生成iOS插件的代碼(就一個.m文件...)    
  d.plugman platform add --platform_name android     //src目錄下生成android插件的代碼(還是一個源碼文件...)

2.修改helloWord.js文件
var exec = require('cordova/exec');
var helloWorld = {
  // echo接口,msg為傳入的參數,success, error為回調函數
  echo : function(msg, success, error) {
    exec(success, error, "helloWorld", "echo", [msg]);
  }
};

window.hello = helloWorld;

注意:這里直接把對象直接賦值到window上,其實是為了:1.調試調用方便 2.ngcordova不會每次都自動創建一個factory...
官方的做法:是直接放到exports上的...

 3.分別修改java和xcode文件中的代碼...(這里不在解釋.插件的開發本來就是需要有原生開發經驗的.具體可以對比查看上面的插件源碼)

? 4.cordova plugin add xxx(把插件通過絕對路勁直接引用,可以放在github上,git地址引用...)

? 5.代碼中引用...

? 6.我自己開發了一個插件:繼承支付寶以及微信支付,還有友盟社會會組件(分享,認證登陸功能)的插件...也開發了一個星期左右,android是找的另一個同學開發的...

  (運行后的官方效果圖...)

?

?

5.前端的修改

這一部分想講的東西太多了,例如css使用scss? 異步加載requireJS? 抑或是js中的解耦?頁面復用?......
東西挺多的,一個一個講了。

1.使用scss,是因為可以讓css支持各種花式寫法,能更加具有可讀性性。加上一些工具壓縮打包:http://koala-app.com/
能快速的滿足業務邏輯需求,多快好省的完成各種花式頁面,例如,一元奪寶電商什么的?

2.使用ionic框架后,為了避免初始化的時候加載太多東西,我們可以用requireJS異步加載一些資源.
等到使用的時候才去加載顯示出來,當然,程序使用一段時間后,資源還是不能釋放的。
這是前端的問題,畢竟是網頁,可做各種優化。例如少用圖片。復用dom(這也是reactjs做的最大的優化,虛擬dom樹)等等...

3.頁面的復用以及js的解耦。我會將每個頁面都獨立分開來控制,用單獨的js來寫。每個js單獨一個controler.而不是全部寫在一個js文件中,官網的畢竟只是demo。
這樣的好處就是代碼管理會方便直觀很多,提高移植性,便于復用。
例如,一些內容展示頁面,結構是一樣的,只是內容文字不同。如果有多個頁面的時候,我們一般可以直接根據傳入的url的加上一個變量來判斷。
但是,如果頁面還是有很多邏輯不同的話,我們至少還是可以復用html頁面的。根據自己定制的路由規則來決定。我一般會連js文件都復用了。
亦或者是一些工具類,util方法,至少不用再多造輪子。有時候甚至是控件也能多寫一些,寫成一些小的html,然后直接用。雖然我也覺得是奇怪的寫法,但是很多人會這么做。真奇怪。

4.補充一條,關于jQuery lite. ionic畢竟是不推薦使用jQuery的,推薦響應式的寫法。但是有時候jQuery使用還是挺方便的,所以引入了一個輕量級jQuery.
其實還是有一些人不習慣,喜歡用jQuery(其實在一些業務邏輯下,使用還是更加方便的,而且一些UI庫都是依賴jQuery的寫法)這里推薦用zepto.比jQury輕量,更加適用于移動端。
但是基本的功能都有的。

5.還有其它各種優化也好,寫法等等,各位讀者需要自己敢于嘗試去探索了...畢竟學無止境...

?

6.繪制冰山圖

ionic框架就像一座冰山,浮在水面上的10%看起來并不危險,最終讓你船毀人亡的是隱藏在下面的那90%。

實際上更合適的一個比喻是,學習ionic框架就像對一座冰山繪圖。

為了使用框架你必須學會框架里所有的內容,花精力去把所有的內容對應到傳統的UI原生適配,甚至于是原生代碼的輔助改寫!

這個過程對于開發者的個人能力要求比較高,甚至于全棧化趨勢,有時候會略顯得不償失。

從長期來看這個過程毫無意義,因為冰山最終都會融化。我已經準備跳出這個坑,敬而遠之......

?

注.如果有遇到問題的同學:歡迎加QQ群討論學習:238911405
可以聯系我,一起交流,
找我做外包都可以,質量用APP Store分類商品 排行第一的APP來保證....不管是原生的,還是hybird APP,不管是后臺還是后端。

注:博主最近肉翻到了新西蘭,想在這邊工作一段時間。由于時差問題,所以一般的事情就直接在群里問就好了...

?

posted on 2016-04-16 18:13 yanshanLove 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/Lxiaolong/p/5399008.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458090.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么要使用工廠模式

工廠的作用相當于幫助我們完成實例化的操作。 優勢1&#xff1a;一般在代碼中&#xff0c;實例化一個類A是直接new A&#xff08;&#xff09;&#xff0c;假如類A是一個完全獨立的類&#xff0c;沒有相似類&#xff0c;則沒有必要使用工廠模式&#xff0c;直接new A&#xff…

css各兼容應該注意的問題

1.div布局在ie瀏覽器和chrome瀏覽器&#xff0c;firefox瀏覽器不同&#xff0c;不如在div里面嵌套3個div&#xff0c;分別左中右&#xff0c;左邊div的pading和margin在ie8以上都是幾乎相同&#xff0c;ie8以下做內邊距x2&#xff0c;在中間的div在chrome和fierfox中默認在左邊…

轉 C++宏定義詳解

來自&#xff1a;傳送門 C宏定義詳解 一、#define的基本用法 #define是C語言中提供的宏定義命令&#xff0c;其主要目的是為程序員在編程時提供一定的方便&#xff0c;并能在一定程度上提高程序的運行效率&#xff0c;但學生在學習時往往不能 理解該命令的本質&#xff0c;總是…

acm之vim的基本配置

http://www.kuangbin.net/archives/vim-acmicpc 轉載于:https://www.cnblogs.com/akrusher/articles/5402426.html

40 個重要的 HTML5 面試問題及答案

2019獨角獸企業重金招聘Python工程師標準>>> 介紹 我是一個ASP.NET MVC開發人員。最近當我找工作的時候&#xff0c;我發現很多問題都是圍繞HTML 5和它的新功能展開的。所以&#xff0c;下面我將列出40個有助于你提高相關HTML 5知識的重要問題。 這些問題并不能保證…

Java常見Jar包的用途

jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用來發現、查找和實現可插入式接口&#xff0c;提供一些一般類實例化、單件的生命周期管理的常用方法. jaxrpc.jar Axis運行所需要的組件包 saaj.jar 創建到端點的點到點連接的方法、創建并處理SOAP消息和附件的方法…

車流檢測之halcon光流法算法實現

* This example program shows how to use optical_flow_mg to compute the optical flow in an image sequence and how to segment the optical flow. *這個示例程序顯示了如何使用._flow_mg來計算圖像序列中的光流&#xff0c;以及如何分割光流。 dev_update_off () dev_…

利用光學流跟蹤關鍵點---30

原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/ 關鍵點&#xff1a;是多個方向上亮度變化強的區域。 opencv:版本是2.4. 光學流函數&#xff1a;calcOpticalFlowPyrLK()。&#xff08;關鍵點偵測器使用goodFeaturesToTrack()&#xff09;二者結合。 相應的啟動文…

基于Redis、Storm的實時數據查詢實踐

通過算法小組給出的聚合文件&#xff0c;我們需要實現一種業務場景&#xff0c;通過用戶的消費地點的商戶ID與posId&#xff0c;查詢出他所在的商圈&#xff0c;并通過商圈地點查詢出與該區域的做活動的商戶&#xff0c;并與之進行消息匹配&#xff0c;推送相應活動信息到用戶手…

從離散值中把值相近的放在一起

//30根細條得到30個長度值&#xff0c;選擇出現值相近且出現次數最多的&#xff0c;算其均值作為輸出 #include <iostream> using namespace std;int main() {double dRawdata[5] {1.1,1.2,1.3,2.5,3.2};//先升序排序double dSort[5][5] {0};double* p dRawdata;int a…

register_globals(全局變量注冊開關)

register_globals&#xff0c;是php.ini文件里面的一個配置選項&#xff0c;接下來&#xff0c;我們可以通過例程來分析一下&#xff0c;當register_globals on 與 register_globals off 的時候&#xff0c;對php語言的一些安全影響。測試源代碼如下&#xff1a;index.html 源…

精述IBM的MQTT協議和MQTT-S協議

一&#xff0e;MQTT簡介 MQTT (Message Queuing Telemetry Transport) 是由IBM研發的構建在TCP/IP之上的簡單輕量的消息協議&#xff0c;目標使用場景為受限制環境&#xff0c;如低帶寬、高延遲、不可靠網絡&#xff0c;很適用于M2M和IoT中。它的競爭協議包括XMPP協議和IETF的C…

20150103--SQL連接查詢+視圖-02

20150103--SQL連接查詢視圖-02 子查詢 一條查詢語句出現在另外一條查詢語句的內部&#xff0c;這條語句就被稱之為子查詢語句。 子查詢分類 子查詢可以根據子查詢返回的結果以及子查詢出現的位置兩種方式進行分類 按結果分類&#xff1a; 標量子查詢&#xff1a;子查詢返回的結…

QtQuick controls和controls2 自定義樣式

2019獨角獸企業重金招聘Python工程師標準>>> controls import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Rectangle {color: "green"Button {id:buttontext: qsTr("Second page")anchors.centerIn: parentpr…

電腦開機3秒就重啟循環_電腦修好后客戶不愿支付上門費,行,那電腦開機60秒自動關機吧!...

上門維修電腦已經非常普及了&#xff0c;上門維修電腦費用要比送修(送到維修店)費用高&#xff0c;送修電腦只有一項維修費用&#xff0c;上門維修電腦比送修多了一項費用&#xff0c;這項費用就是上門費。有人說維修電腦收取上門費用不合理&#xff0c;其實這樣的說法非常自私…

jQuery屬性篩選選擇器

2019獨角獸企業重金招聘Python工程師標準>>> 代碼一 <h2>屬性篩選選擇器</h2><h3>[attval]、[att]、[att|val]、[att~val]</h3><div class"left" testattr"true" ><div class"div" testattr"t…

java 代碼優化

Java程序中的內存管理機制是通過GC完成的&#xff0c;“一個對象創建后被放置在JVM的堆內存中&#xff0c;當永遠不在應用這個對象的時候將會被JVM在堆內存中回收。被創建的對象不能再生&#xff0c;同時也沒有辦法通過程序語句釋放”&#xff08;這個是《Java的GC機制》中提到…

Halcon中OCR的實現及關鍵函數解析

OCR的實現共分為兩步&#xff0c;1是使用字符數據來訓練OCR。2是使用OCR進行字符的識別。 訓練分類器 訓練分類器共分為4步&#xff1a; 1是使用閾值來分割字符區域&#xff1b; 2是調用append_ocr_trainf函數將字符加入訓練集&#xff1b; 3是創建分類器&#xff1b; 4是…

MATLAB 長度和像素_Matlab中短時傅里葉變換 spectrogram和stft的用法

在Matlab中&#xff0c;做短時傅里葉變換需要使用函數spectrogram&#xff0c;而在Matlab2019中&#xff0c;引入了一個新的函數stft&#xff0c;下面我們就來看下這兩個函數都如何使用。短時傅里葉變換的基本原理就是將數據分段加窗&#xff0c;做fft&#xff0c;在分段時會有…