ionic 
Building Mobile Apps with Ionic 
An Introduction By Morris Singer
WHO AM I 
• Senior Software Engineer 
Cengage Learning 
• Technical Cofounder & General Counsel 
UnionConnect 
• Sencha Touch (Two Years) 
• Angular.js and Node.js (One Year) 
• Ruby on Rails (Four Years) 
• Previously…
AGENDA 
• Put Ionic in context 
• Make the case for Ionic 
• Review the Ionic technology stack 
• Explore some Ionic components 
• Q & A
WHAT’S IN A FRAMEWORK 
Behind the Design of a Framework Rests a Philosophy about the Roles of Javascript and HTML 
ionic DOM Manipulation 
Two-Way Data Binding JavaScript-Centric
JUST 
RIGHT
JUST 
RIGHT
WHY IONIC 
Ionic Builds on Existing Technologies You Love 
• Great JavaScript framework 
• Industry-standard webview 
• Cordova plugins 
• Best layout engine ever created 
• Slick UI components 
• Robust developer community
WHY IONIC 
Ionic Builds on Existing Technologies You Love 
• Great JavaScript framework 
• Industry-standard webview 
• Cordova plugins 
• Best layout engine ever created 
• Slick UI components 
• Robust developer community
THE IONIC TECHNOLOGY STACK
THE IONIC TECHNOLOGY STACK 
ngCordova
BUILT ON ANGULAR.JS 
Use Familiar Tools to Construct Out Your Application
BUILT ON ANGULAR.JS 
Use Familiar Tools to Construct Out Your Application 
Providers 
angular.service() 
angular.factory() 
angular.provider() 
Directives 
angular.directive() 
Controllers 
angular.controller() 
Templates 
<html></html>
STATES MANAGED BY uiROUTER 
State-Based Router with Nested Views 
angular.module('ionicApp', ['ionic']) 
! 
.config(function ($stateProvider, $urlRouterProvider) { 
! 
$stateProvider 
.state('menu', { 
abstract: 'true', 
templateUrl: 'templates/menu.html', 
controller: 'MenuCtrl' 
}) 
! 
/* ... */ 
! 
.state('menu.work', { 
url: '/work', 
views: { 
menuContent: { 
templateUrl: 'templates/work.html', 
controller: 'WorkCtrl' 
} 
} 
}); 
! 
$urlRouterProvider.otherwise('/work'); 
! 
});
STATES MANAGED BY uiROUTER 
State-Based Router with Nested Views 
angular.module('ionicApp', ['ionic']) 
! 
.config(function ($stateProvider, $urlRouterProvider) { 
! 
$stateProvider 
.state('menu', { 
abstract: 'true', 
templateUrl: 'templates/menu.html', 
controller: 'MenuCtrl' 
}) 
! 
/* ... */ 
! 
.state('menu.work', { 
url: '/work', 
views: { 
menuContent: { 
templateUrl: 'templates/work.html', 
controller: 'WorkCtrl' 
} 
} 
}); 
! 
$urlRouterProvider.otherwise('/work'); 
! 
});
COMPONENTS BY IONIC 
Mobile-Appropriate Components and Events, Packaged as Angular Directives
COMPONENTS BY IONIC 
Mobile-Appropriate Components and Events, Packaged as Angular Directives 
UI Components 
Action Sheets 
Alerts 
Buttons 
Cards 
Carousels 
Checkboxes 
Footers 
Forms 
Headers 
Icons 
Lists 
Modals 
Navigations 
Radio Buttons 
Ranges 
Selects 
Tabs 
Toggles 
Events 
on-hold 
on-tap 
on-touch 
on-release 
on-drag 
on-drag-up 
on-drag-right 
on-drag-down 
on-drag-left 
on-swipe 
on-swipe-up 
on-swipe-right 
on-swipe-down 
on-swipe-left
YOUR OWN COMPONENTS 
Familiar Angular.js Syntax (No Additional Learning Curve)
YOUR OWN COMPONENTS 
Familiar Angular.js Syntax (No Additional Learning Curve) 
angular.module('ionicApp').directive(function() { 
! 
! 
! 
! 
! 
! 
! 
});
YOUR OWN COMPONENTS 
Familiar Angular.js Syntax (No Additional Learning Curve) 
angular.module('ionicApp').directive(function() { 
! 
return { 
! 
! 
! 
! 
! 
! 
}); 
template: '<div>...</div>', 
scope: { /* ... */ }, 
restrict: 'E', 
link: function(scope, element) { /* ... */ } 
};
ACCESS THE DEVICE WITH ngCORDOVA 
ngCordova Provides Angular Services for Cordova Plugins
ACCESS THE DEVICE WITH ngCORDOVA 
ngCordova Provides Angular Services for Cordova Plugins 
AdMob 
App Availability 
BackgroundGeolocation 
Battery Status 
Barcode Scanner 
Camera 
Capture 
Clipboard 
Contacts 
DatePicker 
Device 
Device Motion 
Device Orientation 
Dialogs 
File 
Flashlight 
Geolocation 
Globalization 
GoogleAnalytics 
Keyboard 
Keychain 
NativeAudio 
Media 
Local Notification 
Network 
Pin Dialog 
Printer 
Progress Indicator 
Push Notifications 
Social Sharing 
Spinner Dialog 
Splashscreen 
SQLite 
Statusbar 
Toast 
Vibration 
Zip
GETTING STARTED 
Install Global Dependencies 
$
GETTING STARTED 
Install Global Dependencies 
$ npm install -g cordova ionic
GETTING STARTED 
Install Global Dependencies 
$
GETTING STARTED 
Generate a New Application with a Starter Template 
$
GETTING STARTED 
Generate a New Application with a Starter Template 
$ ionic start myApp sidemenu
GETTING STARTED 
Generate a New Application with a Starter Template 
$ ionic start myApp sidemenu
GETTING STARTED 
Generate a New Application with a Starter Template 
$
GETTING STARTED 
Fire It Up 
$
GETTING STARTED 
Fire It Up 
$ cd myApp; ionic serve
GETTING STARTED 
Fire It Up 
$
THE RESULT 
View Our Skeleton Application with Chrome Canary
THE RESULT 
View Our Skeleton Application with Chrome Canary
SCROLLING 
Responds to Drag Events; Eases and Bounces 
<ion-content> 
</ion-content>
SCROLLING 
Responds to Drag Events; Eases and Bounces 
<ion-content> 
</ion-content>
SCROLLING 
Responds to Drag Events; Eases and Bounces 
<ion-content> 
</ion-content> 
has-bouncing="true">
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
Resources 
</ion-item> 
</ion-list>
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
<a class="item item-icon-left item-icon-right" href="#"> 
<i class="icon ion-chatbubble-working"></i> 
Call Ma 
<i class="icon ion-ios7-telephone-outline"></i> 
</a> 
Resources 
</ion-item> 
</ion-list> 
ICONS
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
ICONS <a class="item left" href="#"> 
item-icon-left item-icon-right" href="#"> 
<i class="icon ion-person-stalker"></i> 
Friends 
<span class="badge badge-assertive">0</span> 
</a> 
Resources 
</ion-item> 
</ion-list> 
chatbubble-working"></i> 
Call Ma 
i class="icon ion-ios7-telephone-outline"></i> 
BADGES
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
ICONS <a class="item left" href="#"> 
item-icon-left item-icon-right" href="#"> 
<i class="icon ion-person-stalker"></i> 
Friends 
<span class="badge badge-assertive">0</span> 
</a> 
Resources 
</ion-item> 
</ion-list> 
chatbubble-working"></i> 
Call Ma 
i class="icon ion-ios7-telephone-outline"></i> 
NBOATDEGSES mic-a"></i> 
Record album 
item-note"> 
Grammy 
</span> 
</a>
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
BUTTONS div class="item item-button-right"> 
ICONS <a class="item left" href="#"> 
item-icon-left item-icon-right" href="#"> 
<i class="icon ion-person-stalker"></i> 
Friends 
<span class="badge badge-assertive">0</span> 
</a> 
Call Ma 
<button class="button button-positive"> 
<i class="icon ion-ios7-telephone"></i> 
</button> 
</div> 
Resources 
</ion-item> 
</ion-list> 
chatbubble-working"></i> 
Call Ma 
i class="icon ion-ios7-telephone-outline"></i> 
NBOATDEGSES mic-a"></i> 
Record album 
item-note"> 
Grammy 
</span> 
</a>
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
BUTTONS div class="item item-button-right"> 
ICONS <a class="item left" href="#"> 
item-icon-left item-icon-right" href="#"> 
<i class="icon ion-person-stalker"></i> 
Friends 
<span class="badge badge-assertive">0</span> 
</a> 
Call Ma 
<button class="button button-positive"> 
<i class="icon ion-ios7-telephone"></i> 
</button> 
</div> 
Resources 
</ion-item> 
</ion-list> 
chatbubble-working"></i> 
Call Ma 
i class="icon ion-ios7-telephone-outline"></i> 
NBOATDEGSES mic-a"></i> 
Record album 
item-note"> 
Grammy 
</span> 
</a> 
avatar" href="#"> 
img src="venkman.jpg"> 
h2>Venkman</h2> 
p>Back off, man. I'm a scientist.</p> 
AVATARS
LISTS 
Lists Can Include Dividers, Icons, Badges, Images, and Form Elements 
<ion-list> 
<ion-item 
nav-clear 
class="item-icon-left" 
menu-close 
ui-sref="^.menu.home"> 
! 
<i class="icon ion-home"></i>Home 
</ion-item> 
! 
<!--...--> 
! 
<ion-item class="item-divider"> 
AVATARS BUTTONS div class="item item-item-thumbnail-button-right"> 
left" href="#"> 
ICONS <a class="item left" href="#"> 
icon-left item-icon-right" href="#"> 
chatbubble-working"></i> 
<img src="cover.jpg"> 
<h2>Nirvana</h2> 
p>Nevermind</p> 
i class="icon ion-person-stalker"></i> 
Friends 
<span class="badge badge-assertive">0</span> 
</a> 
Call Ma 
button class="button button-positive"> 
<i class="icon ion-ios7-telephone"></i> 
</button> 
</div> 
Call Ma 
i class="icon ion-ios7-telephone-outline"></i> 
Resources 
</ion-item> 
</ion-list> 
NBOATDEGSES mic-a"></i> 
Record album 
item-note"> 
Grammy 
</span> 
</a> 
avatar" href="#"> 
venkman.jpg"> 
Venkman</Back off, man. I'm a scientist.</p> 
THUMBNAILS
REMEMBER, IT’S JUST ANGULAR 
Combine Lists with Template Placeholders and ngRepeat 
<ion-list ng-controller="ListController"> 
<ion-item ng-repeat="item in items"> 
<i class="icon ion-{{item.icon}}"></i>{{item.title}} 
</ion-item> 
</ion-list> 
!! 
angular.module("IonicApp") 
.controller("ListController", function ($scope) { 
$scope.items = [ 
{icon: "home", title: "Home"}, 
{icon: "envelope", title: "My Messages"}, 
]; 
});
REMEMBER, IT’S JUST ANGULAR 
Combine Lists with Template Placeholders and ngRepeat 
<ion-list ng-controller="ListController"> 
<ion-item ng-repeat="item in items"> 
<i class="icon ion-{{item.icon}}"></i>{{item.title}} 
</ion-item> 
</ion-list> 
!! 
angular.module("IonicApp") 
.controller("ListController", function ($scope) { 
$scope.items = [ 
{icon: "home", title: "Home"}, 
{icon: "envelope", title: "My Messages"}, 
]; 
});
INTELLIGENT NAVIGATION 
Ionic Can Use uiRouter to Keep Track of History and Expose a Back Button to Users 
<ion-nav-bar></ion-nav-bar> 
<ion-nav-view 
animation="slide-left-right"> 
! 
<!-- ... -—> 
! 
</ion-nav-view>
INTELLIGENT NAVIGATION 
Ionic Can Use uiRouter to Keep Track of History and Expose a Back Button to Users 
<ion-nav-bar></ion-nav-bar> 
<ion-nav-view 
animation="slide-left-right"> 
! 
<!-- ... -—> 
! 
</ion-nav-view>
TOUCH GESTURES 
Ionic Uses Hammer.js for Touch Gesture Support 
SIMPLE EXAMPLE 
<div on-swipe="onSwipe()"> 
Test 
</div>
TOUCH GESTURES 
Ionic Uses Hammer.js for Touch Gesture Support 
SIMPLE EXAMPLE 
<div on-swipe="onSwipe()"> 
Test 
</div>
TOUCH GESTURES 
Ionic Uses Hammer.js for Touch Gesture Support 
SIMPLE EXAMPLE 
<div on-swipe="onSwipe()"> 
Test 
</div> 
CARD SWIPE EXAMPLE 
<swipe-cards> 
<swipe-card 
ng-repeat="card in cards" 
on-destroy="cardDestroyed($index)" 
on-card-swipe="cardSwiped($index)"> 
Card content here 
</swipe-card> 
</swipe-cards> 
https://github.com/driftyco/ionic-contrib-swipe-cards
Q & A

Building Mobile Applications with Ionic

  • 1.
    ionic Building MobileApps with Ionic An Introduction By Morris Singer
  • 2.
    WHO AM I • Senior Software Engineer Cengage Learning • Technical Cofounder & General Counsel UnionConnect • Sencha Touch (Two Years) • Angular.js and Node.js (One Year) • Ruby on Rails (Four Years) • Previously…
  • 3.
    AGENDA • PutIonic in context • Make the case for Ionic • Review the Ionic technology stack • Explore some Ionic components • Q & A
  • 4.
    WHAT’S IN AFRAMEWORK Behind the Design of a Framework Rests a Philosophy about the Roles of Javascript and HTML ionic DOM Manipulation Two-Way Data Binding JavaScript-Centric
  • 5.
  • 6.
  • 7.
    WHY IONIC IonicBuilds on Existing Technologies You Love • Great JavaScript framework • Industry-standard webview • Cordova plugins • Best layout engine ever created • Slick UI components • Robust developer community
  • 8.
    WHY IONIC IonicBuilds on Existing Technologies You Love • Great JavaScript framework • Industry-standard webview • Cordova plugins • Best layout engine ever created • Slick UI components • Robust developer community
  • 9.
  • 10.
    THE IONIC TECHNOLOGYSTACK ngCordova
  • 11.
    BUILT ON ANGULAR.JS Use Familiar Tools to Construct Out Your Application
  • 12.
    BUILT ON ANGULAR.JS Use Familiar Tools to Construct Out Your Application Providers angular.service() angular.factory() angular.provider() Directives angular.directive() Controllers angular.controller() Templates <html></html>
  • 13.
    STATES MANAGED BYuiROUTER State-Based Router with Nested Views angular.module('ionicApp', ['ionic']) ! .config(function ($stateProvider, $urlRouterProvider) { ! $stateProvider .state('menu', { abstract: 'true', templateUrl: 'templates/menu.html', controller: 'MenuCtrl' }) ! /* ... */ ! .state('menu.work', { url: '/work', views: { menuContent: { templateUrl: 'templates/work.html', controller: 'WorkCtrl' } } }); ! $urlRouterProvider.otherwise('/work'); ! });
  • 14.
    STATES MANAGED BYuiROUTER State-Based Router with Nested Views angular.module('ionicApp', ['ionic']) ! .config(function ($stateProvider, $urlRouterProvider) { ! $stateProvider .state('menu', { abstract: 'true', templateUrl: 'templates/menu.html', controller: 'MenuCtrl' }) ! /* ... */ ! .state('menu.work', { url: '/work', views: { menuContent: { templateUrl: 'templates/work.html', controller: 'WorkCtrl' } } }); ! $urlRouterProvider.otherwise('/work'); ! });
  • 15.
    COMPONENTS BY IONIC Mobile-Appropriate Components and Events, Packaged as Angular Directives
  • 16.
    COMPONENTS BY IONIC Mobile-Appropriate Components and Events, Packaged as Angular Directives UI Components Action Sheets Alerts Buttons Cards Carousels Checkboxes Footers Forms Headers Icons Lists Modals Navigations Radio Buttons Ranges Selects Tabs Toggles Events on-hold on-tap on-touch on-release on-drag on-drag-up on-drag-right on-drag-down on-drag-left on-swipe on-swipe-up on-swipe-right on-swipe-down on-swipe-left
  • 17.
    YOUR OWN COMPONENTS Familiar Angular.js Syntax (No Additional Learning Curve)
  • 18.
    YOUR OWN COMPONENTS Familiar Angular.js Syntax (No Additional Learning Curve) angular.module('ionicApp').directive(function() { ! ! ! ! ! ! ! });
  • 19.
    YOUR OWN COMPONENTS Familiar Angular.js Syntax (No Additional Learning Curve) angular.module('ionicApp').directive(function() { ! return { ! ! ! ! ! ! }); template: '<div>...</div>', scope: { /* ... */ }, restrict: 'E', link: function(scope, element) { /* ... */ } };
  • 20.
    ACCESS THE DEVICEWITH ngCORDOVA ngCordova Provides Angular Services for Cordova Plugins
  • 21.
    ACCESS THE DEVICEWITH ngCORDOVA ngCordova Provides Angular Services for Cordova Plugins AdMob App Availability BackgroundGeolocation Battery Status Barcode Scanner Camera Capture Clipboard Contacts DatePicker Device Device Motion Device Orientation Dialogs File Flashlight Geolocation Globalization GoogleAnalytics Keyboard Keychain NativeAudio Media Local Notification Network Pin Dialog Printer Progress Indicator Push Notifications Social Sharing Spinner Dialog Splashscreen SQLite Statusbar Toast Vibration Zip
  • 22.
    GETTING STARTED InstallGlobal Dependencies $
  • 23.
    GETTING STARTED InstallGlobal Dependencies $ npm install -g cordova ionic
  • 24.
    GETTING STARTED InstallGlobal Dependencies $
  • 25.
    GETTING STARTED Generatea New Application with a Starter Template $
  • 26.
    GETTING STARTED Generatea New Application with a Starter Template $ ionic start myApp sidemenu
  • 27.
    GETTING STARTED Generatea New Application with a Starter Template $ ionic start myApp sidemenu
  • 28.
    GETTING STARTED Generatea New Application with a Starter Template $
  • 29.
  • 30.
    GETTING STARTED FireIt Up $ cd myApp; ionic serve
  • 31.
  • 32.
    THE RESULT ViewOur Skeleton Application with Chrome Canary
  • 33.
    THE RESULT ViewOur Skeleton Application with Chrome Canary
  • 34.
    SCROLLING Responds toDrag Events; Eases and Bounces <ion-content> </ion-content>
  • 35.
    SCROLLING Responds toDrag Events; Eases and Bounces <ion-content> </ion-content>
  • 36.
    SCROLLING Responds toDrag Events; Eases and Bounces <ion-content> </ion-content> has-bouncing="true">
  • 37.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> Resources </ion-item> </ion-list>
  • 38.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> <a class="item item-icon-left item-icon-right" href="#"> <i class="icon ion-chatbubble-working"></i> Call Ma <i class="icon ion-ios7-telephone-outline"></i> </a> Resources </ion-item> </ion-list> ICONS
  • 39.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> ICONS <a class="item left" href="#"> item-icon-left item-icon-right" href="#"> <i class="icon ion-person-stalker"></i> Friends <span class="badge badge-assertive">0</span> </a> Resources </ion-item> </ion-list> chatbubble-working"></i> Call Ma i class="icon ion-ios7-telephone-outline"></i> BADGES
  • 40.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> ICONS <a class="item left" href="#"> item-icon-left item-icon-right" href="#"> <i class="icon ion-person-stalker"></i> Friends <span class="badge badge-assertive">0</span> </a> Resources </ion-item> </ion-list> chatbubble-working"></i> Call Ma i class="icon ion-ios7-telephone-outline"></i> NBOATDEGSES mic-a"></i> Record album item-note"> Grammy </span> </a>
  • 41.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> BUTTONS div class="item item-button-right"> ICONS <a class="item left" href="#"> item-icon-left item-icon-right" href="#"> <i class="icon ion-person-stalker"></i> Friends <span class="badge badge-assertive">0</span> </a> Call Ma <button class="button button-positive"> <i class="icon ion-ios7-telephone"></i> </button> </div> Resources </ion-item> </ion-list> chatbubble-working"></i> Call Ma i class="icon ion-ios7-telephone-outline"></i> NBOATDEGSES mic-a"></i> Record album item-note"> Grammy </span> </a>
  • 42.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> BUTTONS div class="item item-button-right"> ICONS <a class="item left" href="#"> item-icon-left item-icon-right" href="#"> <i class="icon ion-person-stalker"></i> Friends <span class="badge badge-assertive">0</span> </a> Call Ma <button class="button button-positive"> <i class="icon ion-ios7-telephone"></i> </button> </div> Resources </ion-item> </ion-list> chatbubble-working"></i> Call Ma i class="icon ion-ios7-telephone-outline"></i> NBOATDEGSES mic-a"></i> Record album item-note"> Grammy </span> </a> avatar" href="#"> img src="venkman.jpg"> h2>Venkman</h2> p>Back off, man. I'm a scientist.</p> AVATARS
  • 43.
    LISTS Lists CanInclude Dividers, Icons, Badges, Images, and Form Elements <ion-list> <ion-item nav-clear class="item-icon-left" menu-close ui-sref="^.menu.home"> ! <i class="icon ion-home"></i>Home </ion-item> ! <!--...--> ! <ion-item class="item-divider"> AVATARS BUTTONS div class="item item-item-thumbnail-button-right"> left" href="#"> ICONS <a class="item left" href="#"> icon-left item-icon-right" href="#"> chatbubble-working"></i> <img src="cover.jpg"> <h2>Nirvana</h2> p>Nevermind</p> i class="icon ion-person-stalker"></i> Friends <span class="badge badge-assertive">0</span> </a> Call Ma button class="button button-positive"> <i class="icon ion-ios7-telephone"></i> </button> </div> Call Ma i class="icon ion-ios7-telephone-outline"></i> Resources </ion-item> </ion-list> NBOATDEGSES mic-a"></i> Record album item-note"> Grammy </span> </a> avatar" href="#"> venkman.jpg"> Venkman</Back off, man. I'm a scientist.</p> THUMBNAILS
  • 44.
    REMEMBER, IT’S JUSTANGULAR Combine Lists with Template Placeholders and ngRepeat <ion-list ng-controller="ListController"> <ion-item ng-repeat="item in items"> <i class="icon ion-{{item.icon}}"></i>{{item.title}} </ion-item> </ion-list> !! angular.module("IonicApp") .controller("ListController", function ($scope) { $scope.items = [ {icon: "home", title: "Home"}, {icon: "envelope", title: "My Messages"}, ]; });
  • 45.
    REMEMBER, IT’S JUSTANGULAR Combine Lists with Template Placeholders and ngRepeat <ion-list ng-controller="ListController"> <ion-item ng-repeat="item in items"> <i class="icon ion-{{item.icon}}"></i>{{item.title}} </ion-item> </ion-list> !! angular.module("IonicApp") .controller("ListController", function ($scope) { $scope.items = [ {icon: "home", title: "Home"}, {icon: "envelope", title: "My Messages"}, ]; });
  • 46.
    INTELLIGENT NAVIGATION IonicCan Use uiRouter to Keep Track of History and Expose a Back Button to Users <ion-nav-bar></ion-nav-bar> <ion-nav-view animation="slide-left-right"> ! <!-- ... -—> ! </ion-nav-view>
  • 47.
    INTELLIGENT NAVIGATION IonicCan Use uiRouter to Keep Track of History and Expose a Back Button to Users <ion-nav-bar></ion-nav-bar> <ion-nav-view animation="slide-left-right"> ! <!-- ... -—> ! </ion-nav-view>
  • 48.
    TOUCH GESTURES IonicUses Hammer.js for Touch Gesture Support SIMPLE EXAMPLE <div on-swipe="onSwipe()"> Test </div>
  • 49.
    TOUCH GESTURES IonicUses Hammer.js for Touch Gesture Support SIMPLE EXAMPLE <div on-swipe="onSwipe()"> Test </div>
  • 50.
    TOUCH GESTURES IonicUses Hammer.js for Touch Gesture Support SIMPLE EXAMPLE <div on-swipe="onSwipe()"> Test </div> CARD SWIPE EXAMPLE <swipe-cards> <swipe-card ng-repeat="card in cards" on-destroy="cardDestroyed($index)" on-card-swipe="cardSwiped($index)"> Card content here </swipe-card> </swipe-cards> https://github.com/driftyco/ionic-contrib-swipe-cards
  • 51.