SlideShare a Scribd company logo
1 of 28
Download to read offline
AngularJS Exposed: Deep Dives
Nitya Narasimhan
@nitya
NYC GTUG Meetup
April 23, 2013
AngularJS (breaking it down..)
¤  1: Introduced (Feb) = bird’s eye view (what + why)
¤  2: Exposed (Apr) = deep dives (concepts in code)
¤  3: Applied (??) = end-to-end app (routes, promises, tests)
¤  4: Extended (??) = advanced topics (Batarang, Karma, ..)
¤  Other??
Bird’s Eye View (Recap)
¤  Client-side JavaScript Framework (OSS Google, 2009)
¤  Advocates Model-View-* architecture for web apps
¤  “HTML enhanced for web apps” (CRUD, single-page)
¤  Directives = Declarative view, Imperative behavior
¤  Scope = Transparent 2-way data binding
¤  Plays nice with others (pure JavaScript, clear boundary)
The “Declarative” Difference
“Static”
View
“Dynamic”
View
Variable = user input
Fixed = string literal
View
(HTML)
Using jQuery Using AngularJS
Behavior
(JavaScript)
No DOM Wrangling needed
2-way Data Binding (in MVC)
JavaScript
UserEvents
ServerEvents
HTML
Tightly
coupled
by logic
Decoupled
with scope
Deep Dives (Today)
¤  Startup (bootstrapping)
¤  Runtime (event handling)
¤  View Templates (HTML ++)
¤  MV-* Philosophy
¤  Binding ($scope context)
¤  Injection (Dependency)
¤  API & Modules
¤  Directives
¤  Services
¤  Filters
¤  Types
¤  Global APIs
¤  Workflow (Seed + Yeoman)
¤  Testing (BDD + Karma)
Bootstrapping: Angular ‘injector’
¤  Declare a static view (HTML)
¤  Identify ‘root’ element for the
dynamic view (ng-app)
¤  Angular treats rooted ‘tree’
as your web-app template
¤  Identifies associated module,
configures $injector service
¤  It creates $scope object to
maintain application state
¤  It uses $compile service to
process AngularJS markup
and render dynamic DOM
JSFiddle-4: Configuring Module
Runtime: Angular ‘interceptor’
¤  Browser event (initiated by
user, network, timer) occurs
¤  Enters JavaScript context to
execute event callbacks
¤  Exits JavaScript context and
renders modified DOM (view)
¤  Angular modifies event flow
to enter custom $digest loop
¤  $eval executes async tasks
¤  $watch evaluates expressions
to detect & process changes
¤  Exits loop when state stabilizes Angular context entry can be explicit (call
$apply) or implicit (Angular operation)
View Templates: HTML Enhanced
¤  “Template” boundaries defined by ng-app
¤  declarative specification of view (static DOM)
¤  compiled at runtime using model + controller (to render dynamic DOM)
¤  consists of standard elements (HTML, CSS) + angular-enhanced elements
¤  Angular-Enhanced Elements
¤  Directive – augmenting attribute or reusable DOM element
¤  Markup – “{{ }}” notation used to bind expressions to elements
¤  Expressions are processed by $parse, can include JS-like code
¤  Filters – “ | “ notation used to format data for display (chain-able)
¤  Form Controls – declarative validation, view manipulation
JSFiddle-2: “Hello “
JSFiddle-3: Form Validation
Data Binding: $scope as context
¤  Stores application state (data
model), links view-controller
¤  Detects data changes to
attached models ($watch)
¤  Provides execution context to
evaluate expressions i.e., {{ }}
¤  Has nested hierarchy (DOM-like)
for accessibility and efficiency
Code shows how ‘name’ binds to
different models in different scopes Angular “2-way binding” synchronizes data
models at view and controller via $scope
JSFiddle-5: Controller context
Injection: Handling Dependency
¤  Client-server relationships
involve “dependency”
¤  Imperative: Clients “craft” the
required dependencies.
¤  Injection: Clients “declare”
dependencies; injector fulfills
them (Inversion of control)
¤  AngularJS $inject service
¤  Ex: controller($scope, $http, $dep)
¤  Provider: “core” $http service
¤  Provider: “custom” $dep service
The Hollywood Principle
“Don’t call us ---- we’ll call you”
Angular API: The Big Picture
¤  Module è Wires application together (analogous to ‘main’)
¤  Directive è Enhance HTML (transform DOM, register behaviors)
¤  Service è Injectable singletons, execute common/async tasks
¤  Filter è Data transforms for display (ornamental or reductive)
¤  Type è Core Angular objects (e.g., FormController)
¤  Global API è Core “angular.*” methods (e.g., angular.toJson)
Angular API: ‘ng’ Module & more
Modules Filters Types gl. APIsServicesDirectives
Directives: Popular usage
¤  ngInit = initialization tasks to do before executing template
¤  ngBind = replace text content of element (e.g., span)
¤  ngModel = perform 2-way data binding for an input element
¤  ngView = adds $route template to view (single page apps)
¤  ngController = assign behavior to a given scope (context)
¤  ngRepeat = auto-instantiate template per item in collection
JSFiddle-6: ng-repeat Directive
Services: Popular Usage
¤ $window = reference to browser’s window object
¤ $document = jQuery-like ref to $window document
¤ $http = server interaction tasks (via XHR or JSONP)
¤ $location = parses app location (URL in address bar)
¤ $route = deep-linking for single-page apps
¤  $routeProvider defines routes for resources
¤  $routeParams extracted from $location search/path
JSFiddle-7: $http Service
Filters: Popular Usage
¤ currency – formats number as currency (w/ symbol)
¤ date – formats to both composed, predefined strings
¤ lowercase, uppercase – transform ‘string’ case
¤ On “Arrays”, processes according to predicate
¤  orderBy – reorders array elements to suit
¤  limitTo – returns slice of array limited to specified count
¤  filter – return selected “matching” subset of array
JSFiddle-4: Custom filter
Quick Start: angular-seed (github)
Recommended Workflow: Yeoman
Scaffolding
(think ‘seed’)
Resolving
(think ‘maven’)
Running
(think ‘ant’)
Workflow: Yeoman Benefits
(Adds)
HTML5 Shiv
Scripts
Analytics
(Simplifies)
Scaffold
Test Runner
Build
Additional (new) resources
Published April 2013
Authors oversaw AngularJS
adoption at Google
Early Access Program
Brian Ford built Batarang for
AngularJS as Google intern
Questions?
Closing the loop:
¤  Twitter è @nitya or #angular-nygdg
¤  Google+ è http://gplus.to/nitya
¤  Meetup è NYC-GDG ‘comments’
¤  Feedback and questions welcome (especially to
influence content and coverage in future talks).

More Related Content

What's hot

Backbone.js
Backbone.jsBackbone.js
Backbone.jsVO Tho
 
Introduction to AJAX In WordPress
Introduction to AJAX In WordPressIntroduction to AJAX In WordPress
Introduction to AJAX In WordPressCaldera Labs
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS BasicsRavi Mone
 
Advanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSAdvanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSSimon Guest
 
Managing JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSManaging JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSDen Odell
 
Laravel 8 export data as excel file with example
Laravel 8 export data as excel file with exampleLaravel 8 export data as excel file with example
Laravel 8 export data as excel file with exampleKaty Slemon
 
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)Binary Studio
 
Introducing AngularJS
Introducing AngularJSIntroducing AngularJS
Introducing AngularJSLoc Nguyen
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project Elad Hirsch
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationAndrew Rota
 
Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w djangoMarcin Baran
 
AngularJS Basics and Best Practices - CC FE &UX
AngularJS Basics and Best Practices - CC FE &UXAngularJS Basics and Best Practices - CC FE &UX
AngularJS Basics and Best Practices - CC FE &UXJWORKS powered by Ordina
 
Requirejs
RequirejsRequirejs
Requirejssioked
 
Angularjs architecture
Angularjs architectureAngularjs architecture
Angularjs architectureMichael He
 
AngularJS introduction
AngularJS introductionAngularJS introduction
AngularJS introductionTania Gonzales
 
Building a Startup Stack with AngularJS
Building a Startup Stack with AngularJSBuilding a Startup Stack with AngularJS
Building a Startup Stack with AngularJSFITC
 
Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Nir Kaufman
 

What's hot (20)

Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Introduction to AJAX In WordPress
Introduction to AJAX In WordPressIntroduction to AJAX In WordPress
Introduction to AJAX In WordPress
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS Basics
 
Advanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSAdvanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JS
 
Managing JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSManaging JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJS
 
Laravel 8 export data as excel file with example
Laravel 8 export data as excel file with exampleLaravel 8 export data as excel file with example
Laravel 8 export data as excel file with example
 
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
 
Introducing AngularJS
Introducing AngularJSIntroducing AngularJS
Introducing AngularJS
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project 
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w django
 
AngularJS Basics and Best Practices - CC FE &UX
AngularJS Basics and Best Practices - CC FE &UXAngularJS Basics and Best Practices - CC FE &UX
AngularJS Basics and Best Practices - CC FE &UX
 
Requirejs
RequirejsRequirejs
Requirejs
 
React
React React
React
 
Angularjs architecture
Angularjs architectureAngularjs architecture
Angularjs architecture
 
The AngularJS way
The AngularJS wayThe AngularJS way
The AngularJS way
 
AngularJS introduction
AngularJS introductionAngularJS introduction
AngularJS introduction
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Building a Startup Stack with AngularJS
Building a Startup Stack with AngularJSBuilding a Startup Stack with AngularJS
Building a Startup Stack with AngularJS
 
Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Angularjs - lazy loading techniques
Angularjs - lazy loading techniques
 

Similar to AngularJS Deep Dives (NYC GDG Apr 2013)

Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJSWei Ru
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development GuideNitin Giri
 
Angular.js Primer in Aalto University
Angular.js Primer in Aalto UniversityAngular.js Primer in Aalto University
Angular.js Primer in Aalto UniversitySC5.io
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersOswald Campesato
 
Angular.js - An introduction for the unitiated
Angular.js - An introduction for the unitiatedAngular.js - An introduction for the unitiated
Angular.js - An introduction for the unitiatedthehoagie
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)Chris Clarke
 
Introduction to Angular js 2.0
Introduction to Angular js 2.0Introduction to Angular js 2.0
Introduction to Angular js 2.0Nagaraju Sangam
 
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle StudiosAngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle StudiosLearnimtactics
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseEPAM Systems
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular jsAayush Shrestha
 

Similar to AngularJS Deep Dives (NYC GDG Apr 2013) (20)

Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
 
AngularJS Workshop
AngularJS WorkshopAngularJS Workshop
AngularJS Workshop
 
Angular js
Angular jsAngular js
Angular js
 
Angularjs Basics
Angularjs BasicsAngularjs Basics
Angularjs Basics
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development Guide
 
Angular.js Primer in Aalto University
Angular.js Primer in Aalto UniversityAngular.js Primer in Aalto University
Angular.js Primer in Aalto University
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for Beginners
 
Angular js
Angular jsAngular js
Angular js
 
Angular.js - An introduction for the unitiated
Angular.js - An introduction for the unitiatedAngular.js - An introduction for the unitiated
Angular.js - An introduction for the unitiated
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
 
Dive into AngularJS and directives
Dive into AngularJS and directivesDive into AngularJS and directives
Dive into AngularJS and directives
 
Angular js 2.0 beta
Angular js 2.0 betaAngular js 2.0 beta
Angular js 2.0 beta
 
Introduction to Angular js 2.0
Introduction to Angular js 2.0Introduction to Angular js 2.0
Introduction to Angular js 2.0
 
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle StudiosAngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete Course
 
Angular
AngularAngular
Angular
 
Angular
AngularAngular
Angular
 
Angular js
Angular jsAngular js
Angular js
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
 

More from Nitya Narasimhan

Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Nitya Narasimhan
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Nitya Narasimhan
 
The Evolution of Social Search
The Evolution of Social SearchThe Evolution of Social Search
The Evolution of Social SearchNitya Narasimhan
 

More from Nitya Narasimhan (6)

Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)
 
From 'Meteor' to 'Maker'
From 'Meteor' to 'Maker'From 'Meteor' to 'Maker'
From 'Meteor' to 'Maker'
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
 
MeteorJS Introduction
MeteorJS IntroductionMeteorJS Introduction
MeteorJS Introduction
 
Angular js gtg-27feb2013
Angular js gtg-27feb2013Angular js gtg-27feb2013
Angular js gtg-27feb2013
 
The Evolution of Social Search
The Evolution of Social SearchThe Evolution of Social Search
The Evolution of Social Search
 

Recently uploaded

QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfROWELL MARQUINA
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Français Patch Tuesday - Avril
Français Patch Tuesday - AvrilFrançais Patch Tuesday - Avril
Français Patch Tuesday - AvrilIvanti
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 

Recently uploaded (20)

QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdf
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Français Patch Tuesday - Avril
Français Patch Tuesday - AvrilFrançais Patch Tuesday - Avril
Français Patch Tuesday - Avril
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
How Tech Giants Cut Corners to Harvest Data for A.I.
How Tech Giants Cut Corners to Harvest Data for A.I.How Tech Giants Cut Corners to Harvest Data for A.I.
How Tech Giants Cut Corners to Harvest Data for A.I.
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 

AngularJS Deep Dives (NYC GDG Apr 2013)

  • 1. AngularJS Exposed: Deep Dives Nitya Narasimhan @nitya NYC GTUG Meetup April 23, 2013
  • 2. AngularJS (breaking it down..) ¤  1: Introduced (Feb) = bird’s eye view (what + why) ¤  2: Exposed (Apr) = deep dives (concepts in code) ¤  3: Applied (??) = end-to-end app (routes, promises, tests) ¤  4: Extended (??) = advanced topics (Batarang, Karma, ..) ¤  Other??
  • 3. Bird’s Eye View (Recap) ¤  Client-side JavaScript Framework (OSS Google, 2009) ¤  Advocates Model-View-* architecture for web apps ¤  “HTML enhanced for web apps” (CRUD, single-page) ¤  Directives = Declarative view, Imperative behavior ¤  Scope = Transparent 2-way data binding ¤  Plays nice with others (pure JavaScript, clear boundary)
  • 4. The “Declarative” Difference “Static” View “Dynamic” View Variable = user input Fixed = string literal View (HTML) Using jQuery Using AngularJS Behavior (JavaScript) No DOM Wrangling needed
  • 5. 2-way Data Binding (in MVC) JavaScript UserEvents ServerEvents HTML Tightly coupled by logic Decoupled with scope
  • 6. Deep Dives (Today) ¤  Startup (bootstrapping) ¤  Runtime (event handling) ¤  View Templates (HTML ++) ¤  MV-* Philosophy ¤  Binding ($scope context) ¤  Injection (Dependency) ¤  API & Modules ¤  Directives ¤  Services ¤  Filters ¤  Types ¤  Global APIs ¤  Workflow (Seed + Yeoman) ¤  Testing (BDD + Karma)
  • 7. Bootstrapping: Angular ‘injector’ ¤  Declare a static view (HTML) ¤  Identify ‘root’ element for the dynamic view (ng-app) ¤  Angular treats rooted ‘tree’ as your web-app template ¤  Identifies associated module, configures $injector service ¤  It creates $scope object to maintain application state ¤  It uses $compile service to process AngularJS markup and render dynamic DOM
  • 9. Runtime: Angular ‘interceptor’ ¤  Browser event (initiated by user, network, timer) occurs ¤  Enters JavaScript context to execute event callbacks ¤  Exits JavaScript context and renders modified DOM (view) ¤  Angular modifies event flow to enter custom $digest loop ¤  $eval executes async tasks ¤  $watch evaluates expressions to detect & process changes ¤  Exits loop when state stabilizes Angular context entry can be explicit (call $apply) or implicit (Angular operation)
  • 10. View Templates: HTML Enhanced ¤  “Template” boundaries defined by ng-app ¤  declarative specification of view (static DOM) ¤  compiled at runtime using model + controller (to render dynamic DOM) ¤  consists of standard elements (HTML, CSS) + angular-enhanced elements ¤  Angular-Enhanced Elements ¤  Directive – augmenting attribute or reusable DOM element ¤  Markup – “{{ }}” notation used to bind expressions to elements ¤  Expressions are processed by $parse, can include JS-like code ¤  Filters – “ | “ notation used to format data for display (chain-able) ¤  Form Controls – declarative validation, view manipulation
  • 13. Data Binding: $scope as context ¤  Stores application state (data model), links view-controller ¤  Detects data changes to attached models ($watch) ¤  Provides execution context to evaluate expressions i.e., {{ }} ¤  Has nested hierarchy (DOM-like) for accessibility and efficiency Code shows how ‘name’ binds to different models in different scopes Angular “2-way binding” synchronizes data models at view and controller via $scope
  • 15. Injection: Handling Dependency ¤  Client-server relationships involve “dependency” ¤  Imperative: Clients “craft” the required dependencies. ¤  Injection: Clients “declare” dependencies; injector fulfills them (Inversion of control) ¤  AngularJS $inject service ¤  Ex: controller($scope, $http, $dep) ¤  Provider: “core” $http service ¤  Provider: “custom” $dep service The Hollywood Principle “Don’t call us ---- we’ll call you”
  • 16. Angular API: The Big Picture ¤  Module è Wires application together (analogous to ‘main’) ¤  Directive è Enhance HTML (transform DOM, register behaviors) ¤  Service è Injectable singletons, execute common/async tasks ¤  Filter è Data transforms for display (ornamental or reductive) ¤  Type è Core Angular objects (e.g., FormController) ¤  Global API è Core “angular.*” methods (e.g., angular.toJson)
  • 17. Angular API: ‘ng’ Module & more Modules Filters Types gl. APIsServicesDirectives
  • 18. Directives: Popular usage ¤  ngInit = initialization tasks to do before executing template ¤  ngBind = replace text content of element (e.g., span) ¤  ngModel = perform 2-way data binding for an input element ¤  ngView = adds $route template to view (single page apps) ¤  ngController = assign behavior to a given scope (context) ¤  ngRepeat = auto-instantiate template per item in collection
  • 20. Services: Popular Usage ¤ $window = reference to browser’s window object ¤ $document = jQuery-like ref to $window document ¤ $http = server interaction tasks (via XHR or JSONP) ¤ $location = parses app location (URL in address bar) ¤ $route = deep-linking for single-page apps ¤  $routeProvider defines routes for resources ¤  $routeParams extracted from $location search/path
  • 22. Filters: Popular Usage ¤ currency – formats number as currency (w/ symbol) ¤ date – formats to both composed, predefined strings ¤ lowercase, uppercase – transform ‘string’ case ¤ On “Arrays”, processes according to predicate ¤  orderBy – reorders array elements to suit ¤  limitTo – returns slice of array limited to specified count ¤  filter – return selected “matching” subset of array
  • 25. Recommended Workflow: Yeoman Scaffolding (think ‘seed’) Resolving (think ‘maven’) Running (think ‘ant’)
  • 26. Workflow: Yeoman Benefits (Adds) HTML5 Shiv Scripts Analytics (Simplifies) Scaffold Test Runner Build
  • 27. Additional (new) resources Published April 2013 Authors oversaw AngularJS adoption at Google Early Access Program Brian Ford built Batarang for AngularJS as Google intern
  • 28. Questions? Closing the loop: ¤  Twitter è @nitya or #angular-nygdg ¤  Google+ è http://gplus.to/nitya ¤  Meetup è NYC-GDG ‘comments’ ¤  Feedback and questions welcome (especially to influence content and coverage in future talks).