SlideShare a Scribd company logo
AngularJS
AN INTRODUCTION
Introduction to the AngularJS framework
AngularJS
• Javascript framework for writing frontend web
apps
– DOM manipulation, input validation, server
communication, URL management, etc.
• Inspired by the Model-View-Controller pattern
– HTML templating approach with two-way binding
• Focus on supporting large and single page
applications
– modules, reusable components, etc.
• Widely used
– a major rewrite is coming out (version 2)
– we will use version 1.x
22/04/2016 AngularJS: an introduction 2
AngularJS
• Javascript framework for writing frontend web
apps
– DOM manipulation, input validation, server
communication, URL management, etc.
• Inspired by the Model-View-Controller pattern
– HTML templating approach with two-way binding
• Focus on supporting large and single page
applications
– modules, reusable components, etc.
• Widely used
– a major rewrite is coming out (version 2)
– we will use version 1.x
22/04/2016 AngularJS: an introduction 3
See:
“Background”
section
AngularJS
• Developed by Google
• Website: https://angularjs.org/
– download version 1.x
• Included in our “starter kit”
– https://github.com/SoNet-2016/starter-kit
22/04/2016 AngularJS: an introduction 4
Concepts and Terminology
Template HTML with additional markup used to describe what should
be displayed
Directive Allows a developer to extend HTML with her own elements
and attributes
Scope Context where the model data is stored so that templates
and controllers can access
Compiler Processes the template to generate HTML for the browser
Data Binding Syncing of data between the Scope and the HTML (two-way)
Dependency
Injection
Fetching and setting up all the functionality needed by a
component
Module A container for parts of an application
Service Reusable functionality available for any view
22/04/2016 AngularJS: an introduction 5
<!DOCTYPE html>
<html lang="en" ng-app>
<head>
<meta charset="UTF-8">
<title>What's your name?</title>
</head>
<body>
<div>
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter
your name">
<h1>Hello {{ name }}!</h1>
</div>
<script src="./angular.min.js"></script>
</body>
</html>
22/04/2016 AngularJS: an introduction 6
Example 1
<!DOCTYPE html>
<html lang="en" ng-app>
<head>
<meta charset="UTF-8">
<title>What's your name?</title>
</head>
<body>
<div>
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter
your name">
<h1>Hello {{ name }}!</h1>
</div>
<script src="./angular.min.js"></script>
</body>
</html>
22/04/2016 AngularJS: an introduction 7
script loads and runs when the
browser signals that the context
is ready
<!DOCTYPE html>
<html lang="en" ng-app>
<head>
<meta charset="UTF-8">
<title>What's your name?</title>
</head>
<body>
<div>
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter
your name">
<h1>Hello {{ name }}!</h1>
</div>
<script src="./angular.min.js"></script>
</body>
</html>
22/04/2016 AngularJS: an introduction 8
Angular scans the HTML
looking for the ng-app
attribute. It creates a scope.
<!DOCTYPE html>
<html lang="en" ng-app>
<head>
<meta charset="UTF-8">
<title>What's your name?</title>
</head>
<body>
<div>
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter
your name">
<h1>Hello {{ name }}!</h1>
</div>
<script src="./angular.min.js"></script>
</body>
</html>
22/04/2016 AngularJS: an introduction 9
The compiler scans the DOM for
templating markups. Then, it fills
them with info from the scope.
<!DOCTYPE html>
<html lang="en" ng-app>
<head>
<meta charset="UTF-8">
<title>What's your name?</title>
</head>
<body>
<div>
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter
your name">
<h1>Hello {{ name }}!</h1>
</div>
<script src="./angular.min.js"></script>
</body>
</html>
22/04/2016 AngularJS: an introduction 10
name is replaced with the
value inserted in the <input>
Two-way
binding
Directives and Data Binding
• Directives
– markers on a DOM element that tell Angular’s HTML
compiler to attach a specific behavior to that
element
– <html lang="en" ng-app>
– <input type="text" ng-model="name" …>
• Data Binding
– the automatic synchronization of data between the
model and the view components
• {{ name }}
22/04/2016 AngularJS: an introduction 11
Other Built-in Directives
• ng-src | ng-href
– delay <img> src | <a> href interpretation to get
handled by Angular
• ng-repeat
– instantiate a template once per item from a
collection
22/04/2016 AngularJS: an introduction 12
<div data-ng-init="names = ['Luigi', 'Laura', 'Teo', 'Gabriella']">
<h3>Loop through names with ng-repeat</h3>
<ul>
<li ng-repeat="name in names">{{ name }}</li>
</ul>
</div>
Example 2
Other Built-in Directives
• ng-show/ng-hide
– show/hide DOM elements according to a given
expression
• ng-if
– include an element in the DOM if the subsequent
expression is true
• ng-click
– Angular version of HTML’s onclick
– execute a given operation when the element is
clicked
22/04/2016 AngularJS: an introduction 13
Filters
• Formats the value of an expression for display
to the user
– {{ name | uppercase }}
• Keeps formatting into the presentation
• Syntax
– {{ expression | filter }}
– {{ expression | filter1 | filter2 }}
– {{ expression | filter:argument }}
22/04/2016 AngularJS: an introduction 14
Controllers
• A controller should be concerned – only! - with
– consuming data,
– preparing it for the view, and
– transmitting it to service for processing
• Best practices
– services are responsible to hold the model and
communicate with a server
– declarations should manipulate the DOM
– views do not have to know about their controller
– a controller definitely does not want to know about
its view
22/04/2016 AngularJS: an introduction 15
Controllers
• A JavaScript function
• It defines a new $scope that may
– contain data (properties)
– specify some behaviors (methods)
• It should contain only the logic needed for a
single view
– i.e., each view should have one controller (and
viceversa)
22/04/2016 AngularJS: an introduction 16
<!DOCTYPE html>
<html lang="en" ng-app="sonetExample" >
<head>
<meta charset="UTF-8">
<title>Introducing... Controllers!</title>
</head>
<body ng-controller="MyCtrl">
<div>
<label>Name</label>
<input type="text" ng-model="name" ...>
<h1>{{ greeting }} {{name}}!</h1>
</div>
[...]
22/04/2016 AngularJS: an introduction 17
HTML
angular.module("sonetExample", [])
.controller('MyCtrl', function ($scope) {
$scope.name = "";
$scope.greeting = "Ciao";
})
JS
module
controller
Example 3
Modules
• Container to collect and organize components
– in a modular way
• Multiple modules can exist in an application
– “main” module (ng-app)
– service modules, controller modules, etc.
• Best practices
– a module for each feature
– a module for each reusable component (especially
directives and filters)
– an application level module which depends on the above
modules and contains any initialization code
22/04/2016 AngularJS: an introduction 18
The Scope ($scope)
• The “glue” between a controller and a template
• An execution context for expressions like
{{ pizza.name }}
• Scopes are arranged in a hierarchical structure that
mimic the DOM structure of the application
• Scopes can watch expressions and propagate
events
• $rootScope
– every application has ONE root scope, all other scopes are
its descendant
22/04/2016 AngularJS: an introduction 19
Routing
• Single page applications need routing
– to mimic static addresses (http://mysite.com/...)
– to manage browser history
• Goal: load different views into the single page
app
22/04/2016 AngularJS: an introduction 20
ngRoute
• Angular API for routing
• Provides
– a directive to indicate where view component should
be inserted in the template (ngView)
– a service that watches window.location for changes
and updates the displayed view ($route)
– a configuration that allows the user to specify the
URL to be used for a specific view ($routeProvider)
• It is located in a dedicated js file
– not in angular.(min).js
22/04/2016 AngularJS: an introduction 21
Using ngRoute
• In a template
<div ng-view></div>
• In your Angular module, add ngRoute as a
dependency
angular.module('sonetExample', [ngRoute])
• Configure the routing table in a config block
.config(['$routeProvider',
function($routeProvider) {
…
}])
22/04/2016 AngularJS: an introduction 22
Example 4
Passing parameters in URLs
URLs:
– #/pizzas/my-pizza
– #/pizzas/another-pizza
Routing table configuration:
22/04/2016 AngularJS: an introduction 23
.config(['$routeProvider', function ($routeProvider){
$routeProvider
.when('/pizzas/:pizzaId', {
templateUrl: 'single-pizza.html',
controller: 'PizzaCtrl',
})
[...]
}])
JS
Passing parameters in URLs
Controller:
22/04/2016 AngularJS: an introduction 24
.controller('PizzaCtrl', ['$routeParams',
function ($routeParams) {
$routeParams.pizzaId
// will be my-pizza or another-pizza
})
JS
Services
• Responsible to hold the
model and communicate
with a server
• Singleton objects that
are instantiated only
once per app and lazy
loaded
– controllers are
instantiated only when
they are needed and
discarded otherwise
22/04/2016 AngularJS: an introduction 25
Built-in Services
• Server communication
– $http, $resource, …
• Wrapping DOM access
– $location, $window, $document, …
• JavaScript functionality
– $animate, $log, …
22/04/2016 AngularJS: an introduction 26
The $http Service
• Uses the XMLHttpRequest object (or JSONP) to
communicate with a server
• How it works
– takes a single argument: a configuration object
– returns a promise with two methods: success() and
error()
• It can use the .then() method, too
– it registers a dedicated callback for the success and
error method
22/04/2016 AngularJS: an introduction 27
The $http Service
22/04/2016 AngularJS: an introduction 28
$http({
method: 'GET',
url: '/someUrl'})
.success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
})
.error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
})
JS
promise
callbacks
The $http Service
22/04/2016 AngularJS: an introduction 29
var sonet = angular.module('sonetExample', []);
sonet.controller('MyCtrl', ['$scope', '$http',
function ($scope, $http) {
var promise = $http.get('/pizzas.json');
promise.success(function(data) {
$scope.pizzas = data;
});
}
]);
JS
The $http Service
22/04/2016 AngularJS: an introduction 30
var sonet = angular.module('sonetExample', []);
sonet.controller('MyCtrl', ['$scope', '$http',
function ($scope, $http) {
var promise = $http.get('/pizzas.json');
promise.success(function(data) {
$scope.pizzas = data;
});
}
]);
JS
Shortcut methods:
.get(), .post(), .put(), .delete(), etc.
$http in a Custom Service
22/04/2016 AngularJS: an introduction 31
// custom service
sonet.factory('Pizza', function($http) {
var pizzaService = {
getData: function () {
return $http.get('/pizzas.json')
.then(function (response) {
return response.data;
});
}
};
return pizzaService;
})
// controller
sonet.controller('PizzaCtrl', ['$scope', 'Pizza',
function ($scope, Pizza) {
Pizza.getData().then(function(pizzaList) {
$scope.pizzas = pizzaList;
});
}
]);
JS
Example 5
The $resource Service
• Replace the "low level" $http service
– it has methods with high-level behaviors
– but the server URLs must be RESTful
• REST: REpresentational State Transfer
– works on the concept of “resource”
• CRUD: Create, Read, Update and Delete
read a collection of resources: GET /pizzas
read a single resource: GET /pizzas/:id
add a new resource: POST /pizzas
update an existing resource: PUT /pizzas/:id
delete an existing resource: DELETE /pizzas/:id
22/04/2016 AngularJS: an introduction 32
The $resource Service
• Requires the ngResource module to be installed
• No callbacks needed!
– e.g., $scope.pizzas = pizzaService.query();
• Available methods
– get(), method: GET, single resource
– query(), method: GET, is array (collection)
– save(), method: POST
– remove(), method: DELETE,
– delete(), method: DELETE
22/04/2016 AngularJS: an introduction 33
Custom Directives
• Application specific
– replace HTML tags with “functional” tags you define
e.g., DatePicker, Accordion, ...
• Naming
• Camel case naming (ngRepeat)
– automatically mapped to ng-repeat, data-ng-
repeat in the templates
e.g., <div ng-repeat></div>
22/04/2016 AngularJS: an introduction 34
Custom Directives
• A directive returns an “object” (directive
definition) with several properties
– details:
https://docs.angularjs.org/api/ng/service/$compile
22/04/2016 AngularJS: an introduction 35
var sonet = angular.module('sonetExample', []);
sonet.directive('helloHeader', function() {
return {
restrict: 'E',
template: '<h2>Hello World!</h2>'
};
});
JS
Custom Directives
22/04/2016 AngularJS: an introduction 36
var sonet = angular.module('sonetExample', []);
sonet.directive('helloHeader', function() {
return {
restrict: 'E',
template: '<h2>Hello World!</h2>'
};
});
JS
Restricts the directive to a specific HTML "item".
If omitted, the defaults (Elements and Attributes) are
used.
Custom Directives
22/04/2016 AngularJS: an introduction 37
var sonet = angular.module('sonetExample', []);
sonet.directive('helloHeader', function() {
return {
restrict: 'E',
template: '<h2>Hello World!</h2>'
};
});
JS
replace or wrap the contents of an
element with this template
Compile and Link
• Named after the two phases Angular uses to create
the live view for your application
• Compile
– looks for all the directives and transforms the DOM
accordingly, then calls the compile function (if it exists)
• Link
– makes the view dynamic via directive link functions
– the link functions typically create listeners on the DOM or
the model; these listeners keep the view and the model in
sync at all times
– scopes are attached to the compiled link functions, and
the directive becomes live through data binding
22/04/2016 AngularJS: an introduction 38
Link Function: Example
22/04/2016 AngularJS: an introduction 39
var sonet = angular.module('sonetExample', []);
sonet.directive('backButton', ['$window', function ($window) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
elem.bind('click', function () {
$window.history.back();
});
}
};
}])
JS
BEST PRACTICES
Other best practices in AngularJS
22/04/2016 AngularJS: an introduction 40
A dot in the model
"There should always be a dot in your model"
Parent scope: $scope.name = "Anon"
Child scope: <input type="text" ng-model="name">
The application will display "Anon" initially, but once the
user change the value a name will be created on the child
scope and the binding will read and write that value.
The parent's name will remain "Anon".
This can cause problems in large applications.
To avoid them:
<input type="text" ng-model="person.name">
22/04/2016 AngularJS: an introduction 41
camelCase vs dash-case
You can use variable named like
my-variable
myVariable
• The latter can cause problems in HTML
– it is case-insensitive
• Angular solution: use either, it will map them to
the same thing
Use dash-case in HTML and camelCase in JavaScript
22/04/2016 AngularJS: an introduction 42
BACKGROUND
Concepts behind AngularJS. Briefly.
22/04/2016 AngularJS: an introduction 43
Model-View-Controller Pattern
• Model
– manage the application data
– e.g., Javascript objects representing pizza names,
pictures, comments, etc.
• View
– what the web page looks like
– e.g., HTML/CSS for viewing pizzas, view pizza photos, etc.
• Controller
– fetch models and control views, handle user interactions
• e.g., Javascript code for DOM event handlers, server
communication, etc.
22/04/2016 AngularJS: an introduction 44
View Generation (frontend)
• HTML/CSS is generated in the frontend
• Templates are commonly used
• Basic idea
– write a HTML document containing parts of the page
that do not change
– add some code that generate the parts computed for
each page
– the template is expanded by executing the code and
substituting the result into the document
• Angular has a rich templating language
22/04/2016 AngularJS: an introduction 45
Models in Angular
• Angular does not specify model data
– i.e., as Javascript objects
• It provides support for fetching data from a
web server
– support for REST APIs
– JSON is frequently used
22/04/2016 AngularJS: an introduction 46
Single Page Applications
• Web applications in which the appropriate
resource is dynamically loaded and added to the
page when necessary
• Instead of changing the page, a view inside the
page is changed
– “everything is in a single web page”
– exploits the templating approach
• The entire page does not reload
– it uses AJAX
22/04/2016 AngularJS: an introduction 47
Single Page Applications
Problems:
1. mimic static addresses (http://mysite.com/...) and
manage browser history
2. mix HTML and JavaScript
3. handle AJAX callbacks
Solutions:
[managed by Angular and similar frameworks]
1. routing (http://mysite.com/#...)
2. templating
3. server backend + HTML5 functionalities
22/04/2016 AngularJS: an introduction 48
References
• AngularJS official guide
– https://docs.angularjs.org/guide
• AngularJS API documentation
– https://docs.angularjs.org/api
• AngularJS in 60 minutes [video]
– https://www.youtube.com/watch?v=i9MHigUZKEM
• Learn Angular in your browser
– http://angular.codeschool.com/
22/04/2016 AngularJS: an introduction 49
Questions?
01QYAPD SOCIAL NETWORKING: TECHNOLOGIES
AND APPLICATIONS
Luigi De Russis
luigi.derussis@polito.it
License
• This work is licensed under the Creative Commons “Attribution-
NonCommercial-ShareAlike Unported (CC BY-NC-SA 3,0)” License.
• You are free:
– to Share - to copy, distribute and transmit the work
– to Remix - to adapt the work
• Under the following conditions:
– Attribution - You must attribute the work in the manner specified by the
author or licensor (but not in any way that suggests that they endorse you
or your use of the work).
– Noncommercial - You may not use this work for commercial purposes.
– Share Alike - If you alter, transform, or build upon this work, you may
distribute the resulting work only under the same or similar license to this
one.
• To view a copy of this license, visit
http://creativecommons.org/license/by-nc-sa/3.0/
22/04/2016 AngularJS: an introduction 51

More Related Content

ODP
Introduction of Html/css/js
PPTX
Angular js PPT
PPTX
Ajax
PPT
Javascript
PPTX
jQuery
PPT
JavaScript Tutorial
PPTX
VB Script
PPTX
Web forms in ASP.net
Introduction of Html/css/js
Angular js PPT
Ajax
Javascript
jQuery
JavaScript Tutorial
VB Script
Web forms in ASP.net

What's hot (20)

PPT
Aspect Oriented Programming
PDF
jQuery for beginners
PPT
Java Script ppt
PPT
Javascript
PDF
Asp.net state management
PPTX
Lab #2: Introduction to Javascript
PPTX
Introduction to Angularjs
PPTX
C# Delegates
PPT
MYSQL - PHP Database Connectivity
PDF
Introduction to ASP.NET Core
PPTX
An Introduction to the DOM
PPT
Java awt
PDF
Intro to HTML and CSS basics
PPT
Classes and data abstraction
PPT
Intro to web services
PPTX
(Fast) Introduction to HTML & CSS
PDF
Basics of JavaScript
PPTX
Html, CSS & Web Designing
Aspect Oriented Programming
jQuery for beginners
Java Script ppt
Javascript
Asp.net state management
Lab #2: Introduction to Javascript
Introduction to Angularjs
C# Delegates
MYSQL - PHP Database Connectivity
Introduction to ASP.NET Core
An Introduction to the DOM
Java awt
Intro to HTML and CSS basics
Classes and data abstraction
Intro to web services
(Fast) Introduction to HTML & CSS
Basics of JavaScript
Html, CSS & Web Designing
Ad

Viewers also liked (17)

PDF
PowerOnt: an ontology-based approach for power consumption estimation in Smar...
PDF
AmI 2016 - Python basics
PDF
Introduction to OpenCV 3.x (with Java)
PDF
AmI 2017 - Python basics
PDF
Programming the Semantic Web
PDF
Semantic Web: an introduction
PDF
Interacting with Smart Environments - Ph.D. Thesis Presentation
PDF
Cnc programming handbook - Peter Schmid
PPT
CNC Programming
PPTX
cAdaptive control
PPTX
Habit 3 Put First things First
PPTX
Put First Things First
PPTX
Begin With The End In Mind 1
PDF
Version Control with Git
PDF
AmI 2017 - Python intermediate
PPTX
Be Proactive 1
PDF
Semantic Web - Ontology 101
PowerOnt: an ontology-based approach for power consumption estimation in Smar...
AmI 2016 - Python basics
Introduction to OpenCV 3.x (with Java)
AmI 2017 - Python basics
Programming the Semantic Web
Semantic Web: an introduction
Interacting with Smart Environments - Ph.D. Thesis Presentation
Cnc programming handbook - Peter Schmid
CNC Programming
cAdaptive control
Habit 3 Put First things First
Put First Things First
Begin With The End In Mind 1
Version Control with Git
AmI 2017 - Python intermediate
Be Proactive 1
Semantic Web - Ontology 101
Ad

Similar to AngularJS: an introduction (20)

PPTX
ME vs WEB - AngularJS Fundamentals
PPTX
Angular js 1.3 presentation for fed nov 2014
PDF
AngularJS Workshop
PPTX
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
PDF
AngularJS Basics
PDF
Angularjs
PPTX
Angular workshop - Full Development Guide
PPT
Angular js
PPT
Angular js
PPTX
Angular js 1.0-fundamentals
PPTX
Learning AngularJS - Complete coverage of AngularJS features and concepts
PDF
Wt unit 5 client &amp; server side framework
PDF
AngularJS in practice
PPTX
Angular js for Beginnners
PDF
AngularJS By Vipin
PPTX
ANGULARJS introduction components services and directives
PPTX
Dive into Angular, part 1: Introduction
PPTX
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
PDF
AngularJS Deep Dives (NYC GDG Apr 2013)
ME vs WEB - AngularJS Fundamentals
Angular js 1.3 presentation for fed nov 2014
AngularJS Workshop
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS Basics
Angularjs
Angular workshop - Full Development Guide
Angular js
Angular js
Angular js 1.0-fundamentals
Learning AngularJS - Complete coverage of AngularJS features and concepts
Wt unit 5 client &amp; server side framework
AngularJS in practice
Angular js for Beginnners
AngularJS By Vipin
ANGULARJS introduction components services and directives
Dive into Angular, part 1: Introduction
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJS Deep Dives (NYC GDG Apr 2013)

More from Luigi De Russis (20)

PDF
Assessing Virtual Assistant Capabilities with Italian Dysarthric Speech
PDF
Semantic Web: an Introduction
PDF
Ambient Intelligence: An Overview
PDF
LAM 2015 - Social Networks Technologies
PDF
AmI 2015 - Python basics
PDF
Introduction to OpenCV (with Java)
PDF
Living in Smart Environments - 3rd year PhD Report
PDF
Semantic Web: an introduction
PDF
Social Network Technologies
PDF
Clean Code
PDF
Living in Smart Environments - 2nd year PhD Report
PDF
Introduction to OpenCV
PDF
Installing OpenCV 2.4.x with Qt
PDF
dWatch: a Personal Wrist Watch for Smart Environments
PDF
Introduction to OpenCV 2.3.1
PDF
Installing OpenCV 2.3.1 with Qt
PDF
Version Control with Git
PDF
Ruby on Rails: a brief introduction
PDF
Domotics: an open approach
PDF
Rule Builder at ISAmI 2011
Assessing Virtual Assistant Capabilities with Italian Dysarthric Speech
Semantic Web: an Introduction
Ambient Intelligence: An Overview
LAM 2015 - Social Networks Technologies
AmI 2015 - Python basics
Introduction to OpenCV (with Java)
Living in Smart Environments - 3rd year PhD Report
Semantic Web: an introduction
Social Network Technologies
Clean Code
Living in Smart Environments - 2nd year PhD Report
Introduction to OpenCV
Installing OpenCV 2.4.x with Qt
dWatch: a Personal Wrist Watch for Smart Environments
Introduction to OpenCV 2.3.1
Installing OpenCV 2.3.1 with Qt
Version Control with Git
Ruby on Rails: a brief introduction
Domotics: an open approach
Rule Builder at ISAmI 2011

Recently uploaded (20)

PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PPTX
Introduction and Scope of Bichemistry.pptx
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
Onica Farming 24rsclub profitable farm business
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
COMPUTERS AS DATA ANALYSIS IN PRECLINICAL DEVELOPMENT.pptx
PPTX
NOI Hackathon - Summer Edition - GreenThumber.pptx
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PPTX
UNDER FIVE CLINICS OR WELL BABY CLINICS.pptx
PDF
Microbial disease of the cardiovascular and lymphatic systems
PPTX
Open Quiz Monsoon Mind Game Prelims.pptx
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
Cell Structure & Organelles in detailed.
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PPTX
Cardiovascular Pharmacology for pharmacy students.pptx
PDF
PSYCHOLOGY IN EDUCATION.pdf ( nice pdf ...)
PDF
Electrolyte Disturbances and Fluid Management A clinical and physiological ap...
PDF
The Final Stretch: How to Release a Game and Not Die in the Process.
PDF
Origin of periodic table-Mendeleev’s Periodic-Modern Periodic table
Abdominal Access Techniques with Prof. Dr. R K Mishra
Introduction and Scope of Bichemistry.pptx
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Onica Farming 24rsclub profitable farm business
Pharmacology of Heart Failure /Pharmacotherapy of CHF
TR - Agricultural Crops Production NC III.pdf
COMPUTERS AS DATA ANALYSIS IN PRECLINICAL DEVELOPMENT.pptx
NOI Hackathon - Summer Edition - GreenThumber.pptx
2.FourierTransform-ShortQuestionswithAnswers.pdf
UNDER FIVE CLINICS OR WELL BABY CLINICS.pptx
Microbial disease of the cardiovascular and lymphatic systems
Open Quiz Monsoon Mind Game Prelims.pptx
STATICS OF THE RIGID BODIES Hibbelers.pdf
Cell Structure & Organelles in detailed.
Renaissance Architecture: A Journey from Faith to Humanism
Cardiovascular Pharmacology for pharmacy students.pptx
PSYCHOLOGY IN EDUCATION.pdf ( nice pdf ...)
Electrolyte Disturbances and Fluid Management A clinical and physiological ap...
The Final Stretch: How to Release a Game and Not Die in the Process.
Origin of periodic table-Mendeleev’s Periodic-Modern Periodic table

AngularJS: an introduction

  • 2. AngularJS • Javascript framework for writing frontend web apps – DOM manipulation, input validation, server communication, URL management, etc. • Inspired by the Model-View-Controller pattern – HTML templating approach with two-way binding • Focus on supporting large and single page applications – modules, reusable components, etc. • Widely used – a major rewrite is coming out (version 2) – we will use version 1.x 22/04/2016 AngularJS: an introduction 2
  • 3. AngularJS • Javascript framework for writing frontend web apps – DOM manipulation, input validation, server communication, URL management, etc. • Inspired by the Model-View-Controller pattern – HTML templating approach with two-way binding • Focus on supporting large and single page applications – modules, reusable components, etc. • Widely used – a major rewrite is coming out (version 2) – we will use version 1.x 22/04/2016 AngularJS: an introduction 3 See: “Background” section
  • 4. AngularJS • Developed by Google • Website: https://angularjs.org/ – download version 1.x • Included in our “starter kit” – https://github.com/SoNet-2016/starter-kit 22/04/2016 AngularJS: an introduction 4
  • 5. Concepts and Terminology Template HTML with additional markup used to describe what should be displayed Directive Allows a developer to extend HTML with her own elements and attributes Scope Context where the model data is stored so that templates and controllers can access Compiler Processes the template to generate HTML for the browser Data Binding Syncing of data between the Scope and the HTML (two-way) Dependency Injection Fetching and setting up all the functionality needed by a component Module A container for parts of an application Service Reusable functionality available for any view 22/04/2016 AngularJS: an introduction 5
  • 6. <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UTF-8"> <title>What's your name?</title> </head> <body> <div> <label>Name</label> <input type="text" ng-model="name" placeholder="Enter your name"> <h1>Hello {{ name }}!</h1> </div> <script src="./angular.min.js"></script> </body> </html> 22/04/2016 AngularJS: an introduction 6 Example 1
  • 7. <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UTF-8"> <title>What's your name?</title> </head> <body> <div> <label>Name</label> <input type="text" ng-model="name" placeholder="Enter your name"> <h1>Hello {{ name }}!</h1> </div> <script src="./angular.min.js"></script> </body> </html> 22/04/2016 AngularJS: an introduction 7 script loads and runs when the browser signals that the context is ready
  • 8. <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UTF-8"> <title>What's your name?</title> </head> <body> <div> <label>Name</label> <input type="text" ng-model="name" placeholder="Enter your name"> <h1>Hello {{ name }}!</h1> </div> <script src="./angular.min.js"></script> </body> </html> 22/04/2016 AngularJS: an introduction 8 Angular scans the HTML looking for the ng-app attribute. It creates a scope.
  • 9. <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UTF-8"> <title>What's your name?</title> </head> <body> <div> <label>Name</label> <input type="text" ng-model="name" placeholder="Enter your name"> <h1>Hello {{ name }}!</h1> </div> <script src="./angular.min.js"></script> </body> </html> 22/04/2016 AngularJS: an introduction 9 The compiler scans the DOM for templating markups. Then, it fills them with info from the scope.
  • 10. <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UTF-8"> <title>What's your name?</title> </head> <body> <div> <label>Name</label> <input type="text" ng-model="name" placeholder="Enter your name"> <h1>Hello {{ name }}!</h1> </div> <script src="./angular.min.js"></script> </body> </html> 22/04/2016 AngularJS: an introduction 10 name is replaced with the value inserted in the <input> Two-way binding
  • 11. Directives and Data Binding • Directives – markers on a DOM element that tell Angular’s HTML compiler to attach a specific behavior to that element – <html lang="en" ng-app> – <input type="text" ng-model="name" …> • Data Binding – the automatic synchronization of data between the model and the view components • {{ name }} 22/04/2016 AngularJS: an introduction 11
  • 12. Other Built-in Directives • ng-src | ng-href – delay <img> src | <a> href interpretation to get handled by Angular • ng-repeat – instantiate a template once per item from a collection 22/04/2016 AngularJS: an introduction 12 <div data-ng-init="names = ['Luigi', 'Laura', 'Teo', 'Gabriella']"> <h3>Loop through names with ng-repeat</h3> <ul> <li ng-repeat="name in names">{{ name }}</li> </ul> </div> Example 2
  • 13. Other Built-in Directives • ng-show/ng-hide – show/hide DOM elements according to a given expression • ng-if – include an element in the DOM if the subsequent expression is true • ng-click – Angular version of HTML’s onclick – execute a given operation when the element is clicked 22/04/2016 AngularJS: an introduction 13
  • 14. Filters • Formats the value of an expression for display to the user – {{ name | uppercase }} • Keeps formatting into the presentation • Syntax – {{ expression | filter }} – {{ expression | filter1 | filter2 }} – {{ expression | filter:argument }} 22/04/2016 AngularJS: an introduction 14
  • 15. Controllers • A controller should be concerned – only! - with – consuming data, – preparing it for the view, and – transmitting it to service for processing • Best practices – services are responsible to hold the model and communicate with a server – declarations should manipulate the DOM – views do not have to know about their controller – a controller definitely does not want to know about its view 22/04/2016 AngularJS: an introduction 15
  • 16. Controllers • A JavaScript function • It defines a new $scope that may – contain data (properties) – specify some behaviors (methods) • It should contain only the logic needed for a single view – i.e., each view should have one controller (and viceversa) 22/04/2016 AngularJS: an introduction 16
  • 17. <!DOCTYPE html> <html lang="en" ng-app="sonetExample" > <head> <meta charset="UTF-8"> <title>Introducing... Controllers!</title> </head> <body ng-controller="MyCtrl"> <div> <label>Name</label> <input type="text" ng-model="name" ...> <h1>{{ greeting }} {{name}}!</h1> </div> [...] 22/04/2016 AngularJS: an introduction 17 HTML angular.module("sonetExample", []) .controller('MyCtrl', function ($scope) { $scope.name = ""; $scope.greeting = "Ciao"; }) JS module controller Example 3
  • 18. Modules • Container to collect and organize components – in a modular way • Multiple modules can exist in an application – “main” module (ng-app) – service modules, controller modules, etc. • Best practices – a module for each feature – a module for each reusable component (especially directives and filters) – an application level module which depends on the above modules and contains any initialization code 22/04/2016 AngularJS: an introduction 18
  • 19. The Scope ($scope) • The “glue” between a controller and a template • An execution context for expressions like {{ pizza.name }} • Scopes are arranged in a hierarchical structure that mimic the DOM structure of the application • Scopes can watch expressions and propagate events • $rootScope – every application has ONE root scope, all other scopes are its descendant 22/04/2016 AngularJS: an introduction 19
  • 20. Routing • Single page applications need routing – to mimic static addresses (http://mysite.com/...) – to manage browser history • Goal: load different views into the single page app 22/04/2016 AngularJS: an introduction 20
  • 21. ngRoute • Angular API for routing • Provides – a directive to indicate where view component should be inserted in the template (ngView) – a service that watches window.location for changes and updates the displayed view ($route) – a configuration that allows the user to specify the URL to be used for a specific view ($routeProvider) • It is located in a dedicated js file – not in angular.(min).js 22/04/2016 AngularJS: an introduction 21
  • 22. Using ngRoute • In a template <div ng-view></div> • In your Angular module, add ngRoute as a dependency angular.module('sonetExample', [ngRoute]) • Configure the routing table in a config block .config(['$routeProvider', function($routeProvider) { … }]) 22/04/2016 AngularJS: an introduction 22 Example 4
  • 23. Passing parameters in URLs URLs: – #/pizzas/my-pizza – #/pizzas/another-pizza Routing table configuration: 22/04/2016 AngularJS: an introduction 23 .config(['$routeProvider', function ($routeProvider){ $routeProvider .when('/pizzas/:pizzaId', { templateUrl: 'single-pizza.html', controller: 'PizzaCtrl', }) [...] }]) JS
  • 24. Passing parameters in URLs Controller: 22/04/2016 AngularJS: an introduction 24 .controller('PizzaCtrl', ['$routeParams', function ($routeParams) { $routeParams.pizzaId // will be my-pizza or another-pizza }) JS
  • 25. Services • Responsible to hold the model and communicate with a server • Singleton objects that are instantiated only once per app and lazy loaded – controllers are instantiated only when they are needed and discarded otherwise 22/04/2016 AngularJS: an introduction 25
  • 26. Built-in Services • Server communication – $http, $resource, … • Wrapping DOM access – $location, $window, $document, … • JavaScript functionality – $animate, $log, … 22/04/2016 AngularJS: an introduction 26
  • 27. The $http Service • Uses the XMLHttpRequest object (or JSONP) to communicate with a server • How it works – takes a single argument: a configuration object – returns a promise with two methods: success() and error() • It can use the .then() method, too – it registers a dedicated callback for the success and error method 22/04/2016 AngularJS: an introduction 27
  • 28. The $http Service 22/04/2016 AngularJS: an introduction 28 $http({ method: 'GET', url: '/someUrl'}) .success(function(data, status, headers, config) { // this callback will be called asynchronously // when the response is available }) .error(function(data, status, headers, config) { // called asynchronously if an error occurs // or server returns response with an error status. }); }) JS promise callbacks
  • 29. The $http Service 22/04/2016 AngularJS: an introduction 29 var sonet = angular.module('sonetExample', []); sonet.controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { var promise = $http.get('/pizzas.json'); promise.success(function(data) { $scope.pizzas = data; }); } ]); JS
  • 30. The $http Service 22/04/2016 AngularJS: an introduction 30 var sonet = angular.module('sonetExample', []); sonet.controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { var promise = $http.get('/pizzas.json'); promise.success(function(data) { $scope.pizzas = data; }); } ]); JS Shortcut methods: .get(), .post(), .put(), .delete(), etc.
  • 31. $http in a Custom Service 22/04/2016 AngularJS: an introduction 31 // custom service sonet.factory('Pizza', function($http) { var pizzaService = { getData: function () { return $http.get('/pizzas.json') .then(function (response) { return response.data; }); } }; return pizzaService; }) // controller sonet.controller('PizzaCtrl', ['$scope', 'Pizza', function ($scope, Pizza) { Pizza.getData().then(function(pizzaList) { $scope.pizzas = pizzaList; }); } ]); JS Example 5
  • 32. The $resource Service • Replace the "low level" $http service – it has methods with high-level behaviors – but the server URLs must be RESTful • REST: REpresentational State Transfer – works on the concept of “resource” • CRUD: Create, Read, Update and Delete read a collection of resources: GET /pizzas read a single resource: GET /pizzas/:id add a new resource: POST /pizzas update an existing resource: PUT /pizzas/:id delete an existing resource: DELETE /pizzas/:id 22/04/2016 AngularJS: an introduction 32
  • 33. The $resource Service • Requires the ngResource module to be installed • No callbacks needed! – e.g., $scope.pizzas = pizzaService.query(); • Available methods – get(), method: GET, single resource – query(), method: GET, is array (collection) – save(), method: POST – remove(), method: DELETE, – delete(), method: DELETE 22/04/2016 AngularJS: an introduction 33
  • 34. Custom Directives • Application specific – replace HTML tags with “functional” tags you define e.g., DatePicker, Accordion, ... • Naming • Camel case naming (ngRepeat) – automatically mapped to ng-repeat, data-ng- repeat in the templates e.g., <div ng-repeat></div> 22/04/2016 AngularJS: an introduction 34
  • 35. Custom Directives • A directive returns an “object” (directive definition) with several properties – details: https://docs.angularjs.org/api/ng/service/$compile 22/04/2016 AngularJS: an introduction 35 var sonet = angular.module('sonetExample', []); sonet.directive('helloHeader', function() { return { restrict: 'E', template: '<h2>Hello World!</h2>' }; }); JS
  • 36. Custom Directives 22/04/2016 AngularJS: an introduction 36 var sonet = angular.module('sonetExample', []); sonet.directive('helloHeader', function() { return { restrict: 'E', template: '<h2>Hello World!</h2>' }; }); JS Restricts the directive to a specific HTML "item". If omitted, the defaults (Elements and Attributes) are used.
  • 37. Custom Directives 22/04/2016 AngularJS: an introduction 37 var sonet = angular.module('sonetExample', []); sonet.directive('helloHeader', function() { return { restrict: 'E', template: '<h2>Hello World!</h2>' }; }); JS replace or wrap the contents of an element with this template
  • 38. Compile and Link • Named after the two phases Angular uses to create the live view for your application • Compile – looks for all the directives and transforms the DOM accordingly, then calls the compile function (if it exists) • Link – makes the view dynamic via directive link functions – the link functions typically create listeners on the DOM or the model; these listeners keep the view and the model in sync at all times – scopes are attached to the compiled link functions, and the directive becomes live through data binding 22/04/2016 AngularJS: an introduction 38
  • 39. Link Function: Example 22/04/2016 AngularJS: an introduction 39 var sonet = angular.module('sonetExample', []); sonet.directive('backButton', ['$window', function ($window) { return { restrict: 'A', link: function (scope, elem, attrs) { elem.bind('click', function () { $window.history.back(); }); } }; }]) JS
  • 40. BEST PRACTICES Other best practices in AngularJS 22/04/2016 AngularJS: an introduction 40
  • 41. A dot in the model "There should always be a dot in your model" Parent scope: $scope.name = "Anon" Child scope: <input type="text" ng-model="name"> The application will display "Anon" initially, but once the user change the value a name will be created on the child scope and the binding will read and write that value. The parent's name will remain "Anon". This can cause problems in large applications. To avoid them: <input type="text" ng-model="person.name"> 22/04/2016 AngularJS: an introduction 41
  • 42. camelCase vs dash-case You can use variable named like my-variable myVariable • The latter can cause problems in HTML – it is case-insensitive • Angular solution: use either, it will map them to the same thing Use dash-case in HTML and camelCase in JavaScript 22/04/2016 AngularJS: an introduction 42
  • 43. BACKGROUND Concepts behind AngularJS. Briefly. 22/04/2016 AngularJS: an introduction 43
  • 44. Model-View-Controller Pattern • Model – manage the application data – e.g., Javascript objects representing pizza names, pictures, comments, etc. • View – what the web page looks like – e.g., HTML/CSS for viewing pizzas, view pizza photos, etc. • Controller – fetch models and control views, handle user interactions • e.g., Javascript code for DOM event handlers, server communication, etc. 22/04/2016 AngularJS: an introduction 44
  • 45. View Generation (frontend) • HTML/CSS is generated in the frontend • Templates are commonly used • Basic idea – write a HTML document containing parts of the page that do not change – add some code that generate the parts computed for each page – the template is expanded by executing the code and substituting the result into the document • Angular has a rich templating language 22/04/2016 AngularJS: an introduction 45
  • 46. Models in Angular • Angular does not specify model data – i.e., as Javascript objects • It provides support for fetching data from a web server – support for REST APIs – JSON is frequently used 22/04/2016 AngularJS: an introduction 46
  • 47. Single Page Applications • Web applications in which the appropriate resource is dynamically loaded and added to the page when necessary • Instead of changing the page, a view inside the page is changed – “everything is in a single web page” – exploits the templating approach • The entire page does not reload – it uses AJAX 22/04/2016 AngularJS: an introduction 47
  • 48. Single Page Applications Problems: 1. mimic static addresses (http://mysite.com/...) and manage browser history 2. mix HTML and JavaScript 3. handle AJAX callbacks Solutions: [managed by Angular and similar frameworks] 1. routing (http://mysite.com/#...) 2. templating 3. server backend + HTML5 functionalities 22/04/2016 AngularJS: an introduction 48
  • 49. References • AngularJS official guide – https://docs.angularjs.org/guide • AngularJS API documentation – https://docs.angularjs.org/api • AngularJS in 60 minutes [video] – https://www.youtube.com/watch?v=i9MHigUZKEM • Learn Angular in your browser – http://angular.codeschool.com/ 22/04/2016 AngularJS: an introduction 49
  • 50. Questions? 01QYAPD SOCIAL NETWORKING: TECHNOLOGIES AND APPLICATIONS Luigi De Russis [email protected]
  • 51. License • This work is licensed under the Creative Commons “Attribution- NonCommercial-ShareAlike Unported (CC BY-NC-SA 3,0)” License. • You are free: – to Share - to copy, distribute and transmit the work – to Remix - to adapt the work • Under the following conditions: – Attribution - You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). – Noncommercial - You may not use this work for commercial purposes. – Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. • To view a copy of this license, visit http://creativecommons.org/license/by-nc-sa/3.0/ 22/04/2016 AngularJS: an introduction 51