angularjs & phonegap

Upload: cuentadisp

Post on 03-Nov-2015

42 views

Category:

Documents


1 download

DESCRIPTION

Angular and phonegap conference

TRANSCRIPT

  • AngularJS & PhoneGap

    Create iPhone & Android apps with AngularJS

    Daniel Zen@zendigital

  • My Background

    Former Agile Consultant for Google & Pivotal Started using AngularJS 2 years ago Started AngularJS-NYC 19 months ago Reformed Zen Digital consultancy 2013

    Mobile & web application development Java background = Android development How to leverage AngularJS framework & develop

    for iOS / cross-platform:

    PhoneGap (aka Cordova)

  • AngularJS pros

    Misko Testable frontend framework

    Old: jsUnit & Selenium New: Jasmine & Karma (or jsTestDriver)

    Less code (Less bugs, maintainability) Directives - reusability Promises for asynchronous Opinionated Momentum Single Page Applications (SPA)

  • AngularJS cons

    Wants to own the DOM Directive required to play well with others

    Still not a lot of coders who know it well Still maturing (but quickly)

  • PhoneGap background

    Created in 2009 at iPhoneDevCamp event Enabled access to native device features

    geo-location accelerometers

    Open-source, Cross platform, device neutral More Web than Objective-C developers 2011:

    PhoneGap source contributed to Apache Cordova Adobe acquires PhoneGap name & developers

    camera push notifications

  • PhoneGap

    embeds HTML5 code inside a WebView able to be extended with native plug-ins makes native accessible from JavaScript web based mobile app you can put in

    iOS App Store, or Google Play Store Build & deploy tools allow you to write 1.5x and

    run everywhere Can be used with almost any web framework

  • PhoneGap visualized

  • PhoneGap in 15 secs

    Of course you have node installed! http://madebyhoundstooth.com/blog/install-node-with-homebrew-on-os-x

    http://developer.apple.com/xcode (for iOS) http://developer.android.com/sdk (for Android)

    sudo npm install -g cordova # [email protected] ~/Projectscordova create ngDemo com.zendigital.ngphonegap Democd ngDemocordova platform add ioscordova run ios

  • PhoneGap & ng in 15 secs

    Swap out code in www/index.html with Todo example from http://angularjs.org Use ADB Plugin for remote debugging Chrome on Android

    sudo npm install -g cordova # [email protected] ~/Projectscordova create ngPhoneGap com.zendigital.ngphonegap Todocd ngPhoneGap

    cordova platform add androidcordova platform add ioscordova emulate androidcordova run ios

  • PhoneGap gotchas

    web apps can be slower than native especially on older phones

    use css animations (not jQuery animations) workaround 300 ms WebKit delay on click pre-load / cache content when possible create a UX with visual/audio feedback and

    loading routines to prevent dead spots Dont call Cordova (native) javascript functions

    until after deviceready fires (angular-phonegap-ready) - Brian

  • AngularJS for mobile

    Some libraries & frameworks are complementarySome have overlapping functionality

    Some are in AlphaAll are worth keeping track of as of early 2014

  • ngTouch module

    http://docs.angularjs.org/api/ngTouch The ngTouch module provides touch events and

    other helpers (but it is not ready yet!) Will have ng-click that doesnt wait 300 ms Has ng-swipe-left & ng-swipe-right directives And, $swipe service that abstracts drag & swipeHowever, you should: Check out https://github.com/ftlabs/fastclick to

    save those 300ms in the meantime new FastClick(document.body);

  • angular-mobile-nav

    https://github.com/ajoslin/angular-mobile-nav simple (lightweight) mobile navigation service Transitions between partials

    instead of Uses $navigate instead of links

    $navigate.go('/path') $navigate.back()

  • angular-gestures

    https://github.com/wzr1337/angular-gestures Based on hammer.js

    events for Tap, DoubleTap, Swipe, Drag, Pinch, Rotate

    examples

    $scope.rotate = function(event) { $scope.rotation = event.gesture.rotation % 360; event.gesture.preventDefault();}$scope.pinch = function(event) { $scope.scaleFactor = event.gesture.scale; event.gesture.preventDefault();}

  • angular-jqm

    github.com/angular-widgets/angular-jqm for more full scale app solution (still in alpha) Native AngularJS directives for jQuery

    Mobile function (but no jQuery dependency) Replaces jquery-mobile-angular-adapter

    which was dependent on jQuery Includes angular-scrolly for iOS looking

    scrolling done with element transforms

  • AngularJS Native

    Angular wrappers around Cordovas javascript libraries that bridge native functionality. All available from Bower https://github.com/btford/angular-phonegap-accelerometer https://github.com/btford/angular-phonegap-notification

    vibration, haptic https://github.com/btford/angular-phonegap-geolocation

    All of these are wrapped in: https://github.com/btford/angular-phonegap-ready

    Still dozens of Cordova plug-ins without AngularJS directives

  • angular-carousel

    https://github.com/revolunet/angular-carousel An AngularJS carousel implementation

    optimised for mobile devices

    example (for touch devices)

    image #{{ $index }}

  • angular-snap

    https://github.com/jtrussell/angular-snap.js An AngularJS carousel implementation

    optimised for mobile devices

    example (for touch devices)

    This is the menu contents

    This is your page content Toggle Snap

  • DriftyCos Ionic Framework

    http://ionicframework.com Self proclaimed Bootstrap for PhoneGap

    CSS framework and Javascript UI library Has AngularJS baked in Check out:

    http://ionicframework.com/docs/components http://ionicframework.com/docs/controllers http://ionicframework.com/docs/guide/installation.html

    I like what I see...

  • Tips & Tricks

    Debug iOS in Safari & Android with Chrome + Batarang might need to conditionally mock Cordova environment

    Prevent page zooming

    UX instant feedback is key Use CSS :active selector CSS3 loaders & spinners Use ftlabs FastClick

    Wrap any native calls via Cordova javascript with btford.phonegap.ready

    Cordova javascript callbacks should employ safeApply prevent "Error: $apply already in progress"

  • Optimizations

    Minimize DOM Minimize http calls to prevent latency Preload ng-templates

    https://github.com/karlgoldstein/grunt-html2js OR https://npmjs.org/package/grunt-angular-templates

    Bindonce to avoid unnecessary 2-way bindings https://github.com/Pasvaz/bindonce

    Employ $scope.$on('$destroy') to kill unnecessary callbacks Hardware (GPU) assisted CSS transitions Automate your iterative workflow!

  • Resources http://briantford.com/blog/angular-phonegap.html http://devgirl.org/2013/06/10/quick-start-guide-phonegap-and-angularjs http://blog.revolunet.com/angular-for-mobile

    YouTube: Building Mobile Apps with AngularJS and PhoneGap - Brian Ford Creating PhoneGap Apps with AngularJS & Topcoat

    A copy of these slides is available at:http://bit.ly/zen-ng-phonegap

    Video of the talk is at:http://youtu.be/wVntVkRLR3M