[转]Ionic – Mobile UI Framework for PhoneGap/Cordova Developers
本文转自:http://devgirl.org/2014/01/20/ionic-mobile-ui-framework-for-phonegapcordova-developers/
Ionic is both a CSS framework as well as a JavaScript UI library. If you’re an AngularJS developer you will be right at home as Ionic uses AngularJS Extensions via directives to provide user interactions, gestures, animations and more. It follows a View Controller pattern where their built-in Controllers handle the UI interaction with the view.
What Does it Include?
- A comprehensive set of UI Components – tabs, headers, navigation, modal, toggle, checkbox, radio, action sheet, loading, slide boxes, cards, range etc.
- Icon Pack – Ionic has a large set of icons to be used with your mobile apps easily, including some animated ones.
- View Stacks / State Management – Ionic has built-in state management for your views to keep track of navigation history. It gives you the ability to push more than one template into a page at one time as well as push data to a view.
- Automatic Transitions based on History – Ionic will transition views to slide left and right automatically based on history.
- Gestures – Ionic incorporates the popular Hammer.js to provide gesture support for things like tap, swipe, drag etc.
- UI Interaction Handling – via AngularJS extensions (ie: handling when a tab is clicked, shown or hidden).
- Side Menus (Slide out) – built-in support for side menus to be toggled when the menu icon is clicked and slide into view.
- Pull to Refresh – you can easily add pull to refresh capabilities to your scroll area that includes a default icon and animation.
- Infinite Scroll – an example of how to use it is included in the starters.
- Full Screen Apps – via the use of the cordova status bar plugin to remove the status bar.
- Customizable Theme – since the Ionic base theme was built with Sass for the resulting CSS, you can easily go in and customize it to create your own theme. The base look is more of an iOS7 flat look but can be changed as desired.
- Advanced Routing – using the AngularUI Router module.
- Grid System via theCSS Flexible Box Layout Module (aka flexbox) standard.
What Does it Look Like?
Below are a couple of screenshots running samples on the iPad and iPhone Simulator via XCode. The first is using the Ionic CSS only and the 2nd using the AngularJS extensions for tabs and navigation. You should also definitely try out the starter samples from github.
Using CSS only
Here is the snippet of code for the above screenshot:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
< div class = "platform-ios7" > < div class = "bar bar-header bar-positive" > < button class = "button icon ion-navicon button-clear" ></ button > < h1 class = "title" >My Application </ h1 > < button class = "button icon ion-edit button-clear" ></ button > </ div > < content > < div class = "list card" style = "margin-top:70px" > < a href = "#" class = "item item-icon-left" > < i class = "icon ion-home" ></ i > Enter home address </ a > < a href = "#" class = "item item-icon-left" > < i class = "icon ion-ios7-telephone" ></ i > Enter phone number </ a > </ div > < ul class = "list card" > < li class = "item item-checkbox" > < label class = "checkbox" > < input type = "checkbox" > </ label > Save Password </ li > < li class = "item item-checkbox" > < label class = "checkbox" > < input type = "checkbox" > </ label > Auto-Sync </ li > </ ul > < ul class = "card list" > < li class = "item item-toggle" > < label class = "toggle" > < input type = "checkbox" > < div class = "track" > < div class = "handle" ></ div > </ div > </ label > Airplane Mode </ li > </ ul > < div class = "card range" > < i class = "icon ion-volume-low" ></ i > < input type = "range" name = "volume" > < i class = "icon ion-volume-high" ></ i > </ div > < div class = "card list" > < label class = "item item-radio" > < input type = "radio" name = "group" > < div class = "item-content" > JavaScript </ div > < i class = "radio-icon ion-checkmark" ></ i > </ label > < label class = "item item-radio" > < input type = "radio" name = "group" > < div class = "item-content" > HTML5 </ div > < i class = "radio-icon ion-checkmark" ></ i > </ label > </ div > < button class = "button button-royal" style = "margin-left: 3px" > Royal Button </ button > < button class = "button button-calm" > Calm Button </ button > < button class = "button button-balanced" > Balanced Button </ button > < button class = "button button-energized" > Energized Button </ button > < button class = "button button-clear" > Clear Button </ button > < button class = "button button-dark" > Dark Button </ button > < button class = "button button-positive" > Positive Button </ button > < button class = "button button-full button-balanced" > Full Width Button </ button > </ content > </ div > < div class = "tabs tabs-icon-top tabs-positive" > < a class = "tab-item" > < i class = "icon ion-home" ></ i > Home </ a > < a class = "tab-item" > < i class = "icon ion-star" ></ i > Favorites </ a > < a class = "tab-item" > < i class = "icon ion-gear-a" ></ i > Settings </ a > </ div > |
Using Extensions (via AngularJS Directives)
Navigation via a tab bar is a common mobile paradigm, and a good example to show how you might use Ionic to handle it with their Angular-Ionic extensions. Their Angular-Ionic seed project includes a simple example of how to implement it and a screenshot is shown below, but I uploaded a hosted version to try it out here.
Below are a couple snippets of sample code from the example app that shows how you could use easily implement tab navigation with the Tab Bar Controller (Angular-Ionic extension).
Sample Markup (showing one tab)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
... < tabs tabs-style = "tabs-icon-top" tabs-type = "tabs-positive" animation = "fade-in-out" tabs-type = "tabs-icon-only" > <!-- Pets tab --> < tab title = "Pets" icon = "icon ion-home" ng-controller = "PetsTabCtrl" > < content has-header = "true" has-tabs = "true" > < list > < item ng-repeat = "pet in pets" type = "item-text-wrap" href = "#/pet/{{pet.id}}" > < h3 >{{pet.title}}</ h3 > < p >{{pet.description}}</ p > </ item > </ item > </ list > </ content > </ tab > ... //Rest of the tabs here ... </ tabs > |
Tab handler code Here’s some example code showing how you would implement handling that tab being shown or hidden in your code:
1
2
3
4
5
6
7
8
9
10
11
12
|
// A simple controller that fetches a list of data .controller( 'PetsTabCtrl' , function ($scope, Pets) { // "Pets" is a service returning mock data (services.js) $scope.pets = Pets.all(); $scope.$on( 'tab.shown' , function () { // Might do a load here }); $scope.$on( 'tab.hidden' , function () { // Might recycle content here }); }) |
More details on the Ionic Tab Bar Controller handling can be foundhere.
Getting Started
You can download or clone the latest release of the Ionic project from Github here. It includes a set of example apps (under /examples/starters) that you can refer to and you can get the Sass source files (under /scss) to customize your theme if desired.
When you’re ready to create your own app, the easiest way I found was to install and use their Node.js tool to create a seed project that contains all of the dependencies for Ionic as well as some sample code.
$ sudo npm install -g ionic $ ionic start myproject
Once the seed project is created, it will look just like a base cordova/phonegap app with platforms, plugins, merges, www etc folders, so at that point you can add the platforms you want via the cordova/phonegap CLI commands. To run the examples shown above, I simply built for iOS using the $ phonegap local build iOS
command (or if you’re using cordova CLI $ cordova platform add ios
etc) and opened the resulting .xcodeproject (from the platforms/iOS folder) in Xcode and ran it. For a more comprehensive guide on getting started, see their docs here.
My initial experience with Ionic was very positive and I found it well-documented with many code samples, tutorials and a seed project to get up and running quickly, particularly considering it’s alpha state (came out late November 2013), so check it out. I plan to continue to try out their features in my own development and more extensively in the near future as well and will blog features or samples I think might be useful to the rest of you :).
[转]Ionic – Mobile UI Framework for PhoneGap/Cordova Developers的更多相关文章
- Hybrid UI framework shootout: Ionic vs. Famo.us vs. F7 vs. OnsenUI
1 Introduction In the past 2 years I’ve been working intensively on mobile applications, mostly hybr ...
- phonegap+cordova+ionic调用原生API
上一篇博客讲了phonegap+cordova+ionic的环境搭建,今天再来分享一篇cordova调用原生API的文章.从技术角度上来讲,这并不是很难,只是有些细节要是没有注意,或者某些步骤不知道的 ...
- WINDOWS下PhoneGap(Cordova)安装笔记
1.首先下载Node.js 安装nodejs很简单直接点击安装文件下一步直至成功即可,安装notejs的同时npm也会同时安装 成功后打开notejs的命令行工具 输入“node -v”," ...
- 开始学习Angular Mobile UI
介绍 Mobile AngularUI 可以让你使用Twitter Booostrap和Angular JS来开发混合移动App和桌面应用程序. 下面是是一些贯穿整个项目的步骤,我强烈的建议你去继续阅 ...
- phonegap,Cordova 使用html5标签
某些安卓手机的webview使用location.href="tel:123456"不能调到打电话的界面,可以用下面的解决办法: config.xml文件最后加上一行: <a ...
- [Phonegap+Sencha Touch] 移动开发36 Phonegap/Cordova项目的图标和启动画面(splashscreen)配置
原文地址:http://blog.csdn.net/lovelyelfpop/article/details/40780111 Phonegap/Cordova项目中的config.xml文件.里面配 ...
- 如何安装 PhoneGap / Cordova (for Win10)
最近需要配置 PhoneGap / Cordova 环境,折腾了一阵子,写篇博客 Mark 一下整个过程. 具体参照了:http://www.assortedgarbage.com/apigee/ 以 ...
- PhoneGap+Cordova+SenchaTouch-01-环境搭建
转http://my.oschina.net/zhongwenhao/blog/369465 环境搭建基于 windows ,mac系统可以借鉴 1.安装NodeJS 和ruby http://no ...
- 跨平台移动开发phonegap/cordova 3.3全系列教程-简介
一. 跨平台實現架構: phonegap +asp.net+jquery mobile/jqmobi 二. PhoneGap简介 PhoneGap是一个开源的开发框架,用来构建跨平台的使用HT ...
随机推荐
- C# 通用验证类 支持 WPF,MVC,Winform
验证方式, 通过继承 IDataErrorInfo接口 和 DataAnnotations 解释标记语言而实现, 为了能在WPF上通用,所了也要继承属性更改通知接口INotifyPropertyC ...
- 为C1Chart for WPF添加自定义标题、坐标轴单位标签以及旋转坐标轴注释
对于图表控件C1Chart for WPF,我们在添加数据,选择图表类型这些基本可视化数据展示后,经常需要通过标题.坐标轴单位标签等信息辅助说明图表对实际场景的意义.C1Chart for WPF并没 ...
- Urlencode and Urldecode 命令行
由于经常使用,简单记录之 $ alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.ar ...
- js 自带的 sort() 方法
1. 方法概述 Array的sort()方法默认把所有元素先转换为String再根据Unicode排序, sort()会改变原数组,并返回改变(排序)后的数组 . 2. 例子 2.1 如果没有提供自定 ...
- Java与线程
导语 我们知道,new一个thread,调用它的start的方法,就可以创建一个线程,并且启动该线程,然后执行该线程需要执行的业务逻辑, 那么run方法是怎么被执行的呢? Java线程和os线程 os ...
- Linux里如何查找文件内容
Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件g ...
- Autofac全面解析系列(版本:3.5) – [使用篇(推荐篇):2.解析获取]
前言 Autofac是一套高效的依赖注入框架. Autofac官方网站:http://autofac.org/ Autofac在Github上的开源项目:https://github.com/auto ...
- mysql下一个版本应该且实现并不复杂增加的常用功能
1.innodb的auto_increment应该在参考oracle的实现方式,定期持久化: 我们目前遇到个问题,出于性能考虑,我们每天会把当天处理完成的数据归到另外一张历史表,并清空,同时有可能会重 ...
- Java正则表达式实用教程
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...
- C#在图片上添加文字代码
创建.NET WinForm程序,设置项目的默认命名空间为Keleyi.Com,在窗体上添加一个PictureBox控件pictureBox_keleyi_com和一个Button控件button_A ...