Building phone apps with AngularJS
![](https://pbs.twimg.com/profile_images/2149314222/square.png)
about.me/carlos_morales
Where are we?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1207786/Screen_Shot_2015-03-26_at_12.07.31.png)
infinitemonkeys.mobi
How much
smartphone usage?
2h 41m
on apps per day
checks the mobile
150 times a day
time spent on mobile ...
apps ? %
web ? %
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209032/hybrid-app-development.png)
Let's analyze them
PROS
- Quality and responsiveness
- Native user interface
- Multi touch, 3D
CONS
- Learning curve
- Code duplicity
- Maintenance
Native
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209366/xcode-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209369/android-icon.png)
PROS
- Write once, run everywhere
- Instant rollout
- Software as Service
CONS
- No access to phone resources
- Download
- No App Store/ Google Play
Web
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209395/html5-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209978/JavaScript-icon.png)
PROS
- Reusable
- Easier to start and maintain
- Access to phone resources
CONS
- Performance, but anymore?
- Users expectations
Hybrid
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209371/Appcelerator-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209381/cordova-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209375/Phonegap-icon.png)
Who wins?
By 2016, 50% of mobile apps will be hybrid.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1220192/mark-zuckerberg-sad.jpg)
time spent on mobile ...
apps 86%
web 14%
infinitemonkeys.mobi
Gartner
"The biggest mistake we’ve made as a company is betting on HTML5 over native."
Mark Zuckerberg
Cordova, PhoneGap ?
Stop confusion!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209375/Phonegap-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209381/cordova-icon.png)
More platforms!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209371/Appcelerator-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209375/Phonegap-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209381/cordova-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210188/sencha-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210203/trigger.io-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210369/Xamarin-logo.png)
How does it work?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210266/cordova-arch.png)
On iOS
Objective-C UIWebView class
On Android
android.webkit.WebView
+880 plugins at plugins.cordova.io
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209381/cordova-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209405/ngCordova-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1209491/onsen-icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210455/ionic-logo3.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210528/supersonic-logo2.png)
Again, more frameworks
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212001/github-icon.png)
Mar 2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212015/star.jpg)
15,000
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212081/kendo-logo.png)
build hybrid native apps,
rather than mobile websites
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212802/ionic-logo3.png)
How it all comes together?
Your app
Ionic
Angular JS
WebView (Cordova)
Native SDK
mikehartington.com/ionic-presents/
Benefits
Focused on performance
Effortless native look & feel
Platform continuity
Sass preprocessed
Built on AngularJS
UI Components
COLLECTION REPEAT
Similar to Angular's ng-repeat
Inspired by iOS’s UICollectionView
Scroll through thousands of items
Only renders the viewable items
Smooth scrolling
mikehartington.com/ionic-presents/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212998/demo-bg.png)
<div class="list">
<div collection-repeat="c in contacts">
<h3>{{ c.name }}</h3>
<p>{{ c.email }}</p>
</div>
</div>
TABS
Nested views
Each tab has its own nav history
Abstract states in AngularUI Router
mikehartington.com/ionic-presents/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212998/demo-bg.png)
<ion-tabs>
<ion-tab title="Home" icon="ion-home">
<ion-nav-view name="home"></ion-nav-view>
</ion-tab>
<ion-tab title="About" icon="ion-information">
<ion-nav-view name="about"></ion-nav-view>
</ion-tab>
<ion-tab title="Contact" icon="ion-ios7-world">
<ion-nav-view name="contact"></ion-nav-view>
</ion-tab>
</ion-tabs>
SIDE MENU
mikehartington.com/ionic-presents/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212998/demo-bg.png)
<ion-side-menus>
<ion-side-menu-content>
<ion-nav-view name="menuContent"></ion-nav-view>
</ion-side-menu-content>
<ion-side-menu side="left">
<ion-header-bar class="bar-assertive">
<h1 class="title">Left Menu</h1>
</ion-header-bar>
<ion-content>
...
</ion-content>
</ion-side-menu>
</ion-side-menus>
PULL REQUEST
mikehartington.com/ionic-presents/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1212998/demo-bg.png)
<ion-content>
<ion-refresher on-refresh="doRefresh()"
pulling-text="Pull to refresh..."
refreshing-text="Refreshing!"
refreshing-icon="ion-loading-c">
</ion-refresher>
<ion-list>
<ion-item ng-repeat="item in items">
{{item}}
</ion-item>
</ion-list>
</ion-content>
DEMO TIME
“If debugging is the process
of removing software bugs,
then programming must be the
process of putting them in.”
Edsger Dijsktra
IONIC START GUIDE
http://ionicframework.com/getting-started/
NG-CORDOVA INSTALL
http://ngcordova.com/docs/install/
NG-CORDOVA GEOLOCATION
http://ngcordova.com/docs/plugins/geolocation/
Conclusions
- Importance of mobile phones
- Native > Hybrid > Web
- Apache Cordova != PhoneGap
- Benefits of Ionic
- Development process
AppGyver
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1210528/supersonic-logo2.png)
about.me/carlos_morales
![](https://s3.amazonaws.com/media-p.slid.es/uploads/carlosmorales/images/1219306/careto_grafiti.jpg)
Gracias!
Building phone apps with AngularJS
By Carlos Morales
Building phone apps with AngularJS
Slides used as presentation in Meetup Zurich Details at http://www.meetup.com/AngularJS-ZRH/events/221338711/
- 774