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

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Recently uploaded (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

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).