SlideShare a Scribd company logo
AngularJS ­ Javascript framework for superheroes
Sponsors
         
Media Partners
       
Back in time...
... when the dinosaurs rule the Earth
Websites instead of webapps
Client seen as a dumb interface
All the workload handled by the server
No client­side logic
Javascript coders seen as web designers
Getting into present days...
AJAX ­ HTML5 ­ CSS3
Web 2.0
Client splitted from server
Lots of new Javascript libraries
Web application
Javascript: the answer!
Javascript framework
MVC Architecture
Big web apps
A current problem
Too much time
Too much code
Too much stress
Building client­side webapp is still hard
DOM Manipulation
Data validation
Angular for the win!
Data­binding
Basic templating directives
Form validation
Routing
Reusable components
Dependency injection
Unit­testing
Bootstrapping
Load HTML DOM
Load the module associated with the directive
Create the application injector
Compile the DOM treating the ng­app directive as the root of the compilation
Conceptual Overview
1.  The browser loads the HTML and parses it into a DOM
2.  The browser loads angular.js script
3.  Angular waits for DOMContentLoaded event
4.  Angular looks for ng­app directive, which designates the application boundary
5.  The Module specified in ng­app (if any) is used to configure the $injector
6.  The $injector is used to create the $compile service as well as $rootScope
7.  The $compile service is used to compile the DOM and link it with $rootScope
HTML Compiler
Compiler is an angular service which traverses the DOM looking for attributes
Compile: traverse the DOM and collect all of the directives. The result is a linking function
Link: combine the directives with a scope and produce a live view. Any changes in the scope model are reflected in the
view, and any user interactions with the view are reflected in the scope model. This makes the scope model the single
source of truth
Conceptual Overview
Also knows as Model View ­ View Model (MVVM)
Scope & View
The scope is responsible for detecting changes to the model section and provides the execution
context for expressions
The browser parses the HTML into the DOM, and the DOM
becomes the input to the template engine known as the
compiler. The compiler looks for directives which in turn set
up watches on the model. The result is a continuously
updating view which does not need template model re­
merging. Your model becomes the single source­of­truth for
your view.
Example Code
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<h1>Hello {{yourName}}!</h1>
Enter a name here
Hello !
Directives
A directive is a behavior or DOM transformation which is triggered by the presence of a custom
attribute, element name, or a class name. A directive allows you to extend the HTML vocabulary
in a declarative fashion
Directives Example
angular.module('Presentation', [])
.controller('DirectiveController', ['$scope', function ($scope) {
$scope.customer = {
name: 'Naomi',
address: '1600 Amphitheatre'
};
}])
.directive('myCustomer', function () {
return {
template: '<b>Name</b>: {{customer.name}} <b>Address</b>: {{customer.add
};
});
// HTML
<div ng-controller="DirectiveController">
<div my-customer></div>
</div>
Name: Naomi Address: 1600 Amphitheatre
Filters
Filters perform data transformation. Typically they are used in conjunction with the locale to
format the data in locale specific output. They follow the spirit of UNIX filters and use similar
syntax | (pipe)
Filters Example
<div>Formatted number: {{val | number:2}}</div>
<div>Your name (in lowercase): {{user.name | lowercase}}</div>
Formatted number:
Enter a name here
Your name (in lowercase):
Client­Side Routing
$route is used for deep­linking URLs to controllers and views (HTML partials).
It watches $location.url() and tries to map the path to an existing route definition. You can
define routes through $routeProvider's API.
The $route service is typically used in conjunction with the ngView directive and the
$routeParams service.
Routing Example
angular.module('MyApp', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/user/:id', {
templateUrl: 'views/user.html',
controller: 'UserController'
});
})
.controller('UserController', ['$scope', '$route', function ($scope, $route) {
$scope.userId = $route.current.params.id;
});
Services
Angular services are substitutable objects that are wired together using dependency injection
(DI). You can use services to organize and share code across your app.
Angular services are:
Lazily instantiated: Angular only instantiates a service when an application component depends
on it
Singletons: Each component dependent on a service gets a reference to the single instance
generated by the service factory
Angular offers several useful services (like $http), but for most applications you'll also want to
create your own.
Services Example
angular.module('Presentation', [])
.service('notify', ['$window', function (window) {
var msgs = [];
return function (msg) {
msgs.push(msg);
if (msgs.length > 2) {
window.alert(msgs);
msgs = [];
}
};
})
.controller('ServiceController', ['$scope', 'notify',
function ($scope, notify) {
$scope.notify = notify;
});
// HTML
<div ng-controller="ServiceController">
<input type="text" ng-init="message='Developers'" ng-model="message"/>
<button ng-click="notify(message)") Notify</button>
</div>
Developers  Notify
Form
Form is simply a group of controls. Angular gives state to each of them, such as pristine, dirty, valid, invalid
Angular form creates an instance of FormController. FormController itself has methods and properties:
formName.$pristine: TRUE if the user has not interacted with the form yet
formName.$dirty: TRUE if the user has already interacted with the form.
formName.$valid: TRUE if all containing form and controls are valid
formName.$invalid: TRUE if at least one containing form and control is invalid.
formName.$error: Is an object hash, containing references to all invalid controls or forms
Form States
It is important to understand flow of the form states in order to use angular form properly. This flow gives you visualization
of the form state from the very first time the form is rendered until the user has finished filling the form
Flow 1: pristine and invalid ­ When the form is first rendered and the user has not interacted with the form yet.
Flow 2: dirty and invalid ­ User has interacted with the form, but validity has not been satisfied, yet
Flow 3: dirty and valid ­ User has finished filling the form and all the validation rule has been satisfied
Form Example (HTML)
<div ng-controller="FormController">
<form name="form" class="css-form" novalidate>
Name:
<input type="text" ng-model="user.name" name="uName" required/>
<br/>E-mail:
<input type="email" ng-model="user.email" name="uEmail" required/>
<br/>
<div ng-show="form.uEmail.$dirty && form.uEmail.$invalid">Invalid:
<span ng-show="form.uEmail.$error.required">
Tell us your email.
</span>
<span ng-show="form.uEmail.$error.email">
This is not a valid email.
</span>
</div>
<input type="checkbox" ng-model="user.agree"
name="userAgree" required/>
I agree<br/>
<div ng-show="!user.agree">
Please agree.
</div>
<button ng-click="reset()" ng-disabled="isUnchanged(user)">
RESET
</button>
<button ng-click="update(user)"
ng-disabled="form.$invalid || isUnchanged(user)">
SAVE
</button>
Form Example (Javascript)
function FormController ($scope) {
$scope.master = {};
$scope.update = function (user) {
$scope.master = angular.copy(user);
};
$scope.reset = function () {
$scope.user = angular.copy($scope.master);
};
$scope.isUnchanged = function (user) {
return angular.equals(user, $scope.master);
};
$scope.reset();
}
Form Live Example
Name: 
E­mail: 
I agree
Please agree.
RESET  SAVE
Unit Testing
Unit testing as the name implies is about testing individual units of code. What makes each
application unique is its logic, and the logic is what we would like to test. If the logic for your
application contains DOM manipulation, it will be hard to test. In angular the controllers are
strictly separated from the DOM manipulation logic and this results in a much easier testability
story.
AngularJS uses Jasmine as unit testing and E2E framework
Unit testing example
function PasswordCtrl ($scope) {
$scope.password = '';
$scope.grade = function () {
var size = $scope.password.length;
if (size > 8) {
$scope.strength = 'strong';
} else if (size > 3) {
$scope.strength = 'medium';
} else {
$scope.strength = 'weak';
}
};
}
var $scope = {};
var pc = $controller('PasswordCtrl', {$scope: $scope});
$scope.password = 'abc';
$scope.grade();
expect($scope.strength).toEqual('weak');
E2E testing example
It's quite easy to test services, directives, filters, controllers, etc with AngularJS and Jasmine
describe('service', function () {
beforeEach(module('myApp.services'));
describe('version', function () {
it('should return current version', inject(function (version) {
expect(version).toEqual('0.1');
}));
});
});
Vincenzo (Wilk) Ferrari
 vincenzo@ibuildings.it
 @__wilky__
 github.com/wilk
  fork slides
 live slides

More Related Content

PDF
Angularjs practical project experiences with javascript development in a bank
PPT
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
PDF
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
PDF
Client Side rendering Not so Easy
PPTX
Java Script - A New Look
PDF
From MEAN to the MERN Stack
PPTX
Building single page applications
PPTX
MongoDB Days UK: Building Apps with the MEAN Stack
Angularjs practical project experiences with javascript development in a bank
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client Side rendering Not so Easy
Java Script - A New Look
From MEAN to the MERN Stack
Building single page applications
MongoDB Days UK: Building Apps with the MEAN Stack

What's hot (20)

PDF
Design & Development of Web Applications using SpringMVC
PDF
Kickstarting Node.js Projects with Yeoman
PDF
Web Components Everywhere
PPTX
JavaScript Performance (at SFJS)
PPTX
Ajax ppt - 32 slides
PDF
Node.js Crash Course (Jump Start)
PPTX
Comparing Angular and React JS for SPAs
PPTX
Single Page WebApp Architecture
PPTX
MEAN Stack
PDF
AngularJS Basics
PPTX
HTML5DevConf 2013 (October): WebGL is a game changer!
PDF
Html5 with Vaadin and Scala
PDF
Fast mobile web apps
PDF
Vaadin and Spring at Devoxx UK 2015
PDF
Selecting the Best Javascript Web Framework
PDF
Wakanda - apps.berlin.js - 2012-11-29
PDF
Web Components
PDF
OSGi and Spring Data for simple (Web) Application Development
PDF
Web components
PPTX
Single Page Application (SPA) using AngularJS
Design & Development of Web Applications using SpringMVC
Kickstarting Node.js Projects with Yeoman
Web Components Everywhere
JavaScript Performance (at SFJS)
Ajax ppt - 32 slides
Node.js Crash Course (Jump Start)
Comparing Angular and React JS for SPAs
Single Page WebApp Architecture
MEAN Stack
AngularJS Basics
HTML5DevConf 2013 (October): WebGL is a game changer!
Html5 with Vaadin and Scala
Fast mobile web apps
Vaadin and Spring at Devoxx UK 2015
Selecting the Best Javascript Web Framework
Wakanda - apps.berlin.js - 2012-11-29
Web Components
OSGi and Spring Data for simple (Web) Application Development
Web components
Single Page Application (SPA) using AngularJS
Ad

Similar to Angular JS - Javascript framework for superheroes (20)

ODP
Angularjs
PPTX
ME vs WEB - AngularJS Fundamentals
PDF
Introduction to Angularjs : kishan kumar
PPTX
Introduction to Angularjs
PDF
One Weekend With AngularJS
PDF
Getting Started With AngularJS
PDF
AngularJS for Beginners
PDF
Getting Started with AngularJS
PPTX
AngularJS Introduction
PPT
Angularjs for kolkata drupal meetup
PPTX
Training On Angular Js
PPTX
Angular js
PPTX
Kalp Corporate Angular Js Tutorials
PPTX
Angular js
PDF
CraftCamp for Students - Introduction to AngularJS
DOCX
angularjs_tutorial.docx
PDF
AngularJS Workshop
PPTX
Angular JS training institute in Jaipur
PDF
AngularJs
Angularjs
ME vs WEB - AngularJS Fundamentals
Introduction to Angularjs : kishan kumar
Introduction to Angularjs
One Weekend With AngularJS
Getting Started With AngularJS
AngularJS for Beginners
Getting Started with AngularJS
AngularJS Introduction
Angularjs for kolkata drupal meetup
Training On Angular Js
Angular js
Kalp Corporate Angular Js Tutorials
Angular js
CraftCamp for Students - Introduction to AngularJS
angularjs_tutorial.docx
AngularJS Workshop
Angular JS training institute in Jaipur
AngularJs
Ad

More from Eugenio Minardi (20)

PDF
Delphi and ExtJS (26 ottobre 2017)
PDF
ExtJS: La piattaforma vincente (tools)
PDF
ExtJS: La piattaforma vincente (multiple screens)
PDF
ExtJS: La piattaforma vincente (rich UI)
PDF
ExtJS: La piattaforma vincente (class system)
PDF
ExtJS: La piattaforma vincente
PDF
Distributed Team Management: 
Pitfall, Challenges and Advantages
PDF
A Practical Introduction to Symfony (European Drupal Days 2015)
PDF
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
PDF
Drupal theming - a practical approach (European Drupal Days 2015)
PDF
Optimizing MariaDB for Web Applications (European Drupal Days 2015)
PDF
PhpStorm for Drupal Development (European Drupal Days 2015)
PDF
Drupal Continuous Integration (European Drupal Days 2015)
PDF
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
PDF
The multilingual Drupal 8 experience (European Drupal Days 2015)
PDF
Another Copernican Revolution: maintenance first, projects second (European D...
PDF
Drupal Security: How to survive Drupalgeddon and prepare for future (European...
PDF
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
PDF
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
PDF
Secure Drupal, from start to finish (European Drupal Days 2015)
Delphi and ExtJS (26 ottobre 2017)
ExtJS: La piattaforma vincente (tools)
ExtJS: La piattaforma vincente (multiple screens)
ExtJS: La piattaforma vincente (rich UI)
ExtJS: La piattaforma vincente (class system)
ExtJS: La piattaforma vincente
Distributed Team Management: 
Pitfall, Challenges and Advantages
A Practical Introduction to Symfony (European Drupal Days 2015)
UN World Food Programme Standards & Best Practises (European Drupal Days 2015)
Drupal theming - a practical approach (European Drupal Days 2015)
Optimizing MariaDB for Web Applications (European Drupal Days 2015)
PhpStorm for Drupal Development (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)
Deploying an Open Source DAM in SAAS Mode (European Drupal Days 2015)
The multilingual Drupal 8 experience (European Drupal Days 2015)
Another Copernican Revolution: maintenance first, projects second (European D...
Drupal Security: How to survive Drupalgeddon and prepare for future (European...
The benefits of an elastic infrastructure on a Drupal e-commerce (European Dr...
Verifying Drupal modules with OWASP ASVS 2014 (European Drupal Days 2015)
Secure Drupal, from start to finish (European Drupal Days 2015)

Recently uploaded (20)

PPTX
innovation process that make everything different.pptx
PPTX
Introduction to Information and Communication Technology
PPTX
Database Information System - Management Information System
PPTX
Introduction to cybersecurity and digital nettiquette
PPT
FIRE PREVENTION AND CONTROL PLAN- LUS.FM.MQ.OM.UTM.PLN.00014.ppt
PDF
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PDF
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
PPTX
Internet___Basics___Styled_ presentation
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PDF
Paper PDF World Game (s) Great Redesign.pdf
PDF
Introduction to the IoT system, how the IoT system works
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
Sims 4 Historia para lo sims 4 para jugar
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
DOCX
Unit-3 cyber security network security of internet system
PPTX
Digital Literacy And Online Safety on internet
PPTX
SAP Ariba Sourcing PPT for learning material
innovation process that make everything different.pptx
Introduction to Information and Communication Technology
Database Information System - Management Information System
Introduction to cybersecurity and digital nettiquette
FIRE PREVENTION AND CONTROL PLAN- LUS.FM.MQ.OM.UTM.PLN.00014.ppt
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
Unit-1 introduction to cyber security discuss about how to secure a system
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
Internet___Basics___Styled_ presentation
Slides PDF The World Game (s) Eco Economic Epochs.pdf
Paper PDF World Game (s) Great Redesign.pdf
Introduction to the IoT system, how the IoT system works
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
Design_with_Watersergyerge45hrbgre4top (1).ppt
INTERNET------BASICS-------UPDATED PPT PRESENTATION
Sims 4 Historia para lo sims 4 para jugar
An introduction to the IFRS (ISSB) Stndards.pdf
Unit-3 cyber security network security of internet system
Digital Literacy And Online Safety on internet
SAP Ariba Sourcing PPT for learning material

Angular JS - Javascript framework for superheroes