An introduction to AngularJS architecture and usage, equipped with an overview of AngularJS role in solving the problems arised along the history of web development.
For further material and updates:
http://blog.avirancohen.com
7. jQuery
⣠Started as DOM manipulation tool
⣠Became an all-in-one javascript library
⥠without much forethoughts
⣠Our best friend back then, until..
9. jQuery + Webapp = Headaches
⣠Structureless spaghetti code
⥠Total code mess
⣠Selectors creating tight coupling
⥠Non-reusable code
⣠Not enough high level abstractions
⥠A lot of code required to be written
13. backbone.js
⣠Solved
⥠No more spaghetti code
⣠NOT Solved
⥠Selectors creating tight coupling
⥠Not enough high level abstractions
14. What about High Level Abstractions?
⣠Backbone is unopinionated.
⣠It lacks the necessary tools to easily manage
any webapp above a certain threshold in
complexity
⣠The bottom line - Backbone asks you to write
A Lot More Code to get what you want
15. And the earth was without form,
and void; and darkness wasupon
the face of the deep
16. ââ
And the earth was without
form, and void; and darkness
wasupon the face of the deep
And God said:
Let there be light..
17. ââ
And the earth was without
form, and void; and darkness
wasupon the face of the deep
And God said:
Let there be light..
22. Itâs not one or another
⣠Angular does not replace jQuery!
⣠jQuery library is the undoubted king of a DOM
manipulation
23. Angularâs Role
⣠Angular offers a comprehensive framework to
develop front-end applications
⣠Actually Angular provides jqLite out of the
box
⥠a jQuery-like library that provides a subset of
jQuery functionality
25. ââ
AngularJS is:
1.a powerful Front-end
JavaScript framework
1.Extends HTML to build
complex web applications
1.Organizes JavaScript code
into reusable components
26. How things worked before:
JS
HTML
Structure
Behavior
CSSPresentation
28. Why Angular
⣠Component based - Code reuse
⣠Extends HTML by adding directives, custom
tags, attributes, expressions, templates within
HTML
⣠Data Binding and Dependency Injection
⥠Everything is communicated automatically
⣠Dependency-injected code for easy testing
and TDD
29. The major features of AngularJS
⣠Easy Data Binding: Two way Data Binding
⣠Reusable Components - Directives
⣠Dependency injection
⣠Routing
⣠Templating
⣠Modules
⣠Controllers
⣠Services
⣠Expressions
⣠Filters
⣠Form Validation
⣠$scope, $http, $routeProvides..
32. Two-way Binding
⣠Any changes in the scope 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
34. VIEW
define the data and methods that
will be available for the view
MODELbusiness logic
Html Template
$scope (VM)
Two-way Data-
Binding
Commands
Commands Change Notifications
What architecture is it?
42. Modules (HTML side)
⣠All AngularJS JavaScript code is stored in
modules
⣠And a module is attached to a page
var app = angular.module('myApp', ['otherModule', 'anotherModule']);
<html ng-app="myApp"> ... </html>
43. Modules (Javascript)
⣠Modules are used to define services, controllers,
directives and filters
⣠Each module member is a constructor which can
inject other services
app.factory('myValues', function() {
return function() {
return [1,2,3,4,5,6];
};
});
app.filter('skipFirstValue', function() {
return function(data) {
return data.slice(1);
}
});
app.run(function($rootScope, myValues, skipFirstValueFilter) {
//this is called when the page is loaded
$rootScope.values = skipFirstValue(myValues());
});
44. $scope
⣠The scope is the glue between JavaScript and
HTML in AngularJS
⣠Anything placed on the $scope object can be
referenced in HTML
<div ng-controller="AppCtrl">
Hello, so far I have <strong>{{ totalApples }} </strong> apples.
<button ng-click="moreApples()">Give me more!</button>
</div>
app.controller('AppCtrl', function($scope) {
$scope.totalApples = 0;
$scope.moreApples = function() {
$scope.totalApples++;
}
});
46. Controllers
⣠Controllers are defined inside of a module like
all other services
app.controller('AppCtrl', function($scope) { ... });
47. Controllers
⣠And they can be referenced in HTML using
ng-controller (Or within routes..)
<html ng-app>
<head>
<script src='angular.js'></script>
<script src='controllers.js'></script>
</head>
<body ng-controller='UserController'>
<div>Hi {{user.name}}</div>
</body>
</html>
function UserController($scope) {
$scope.user = { name:'Larry' };
}
index.html
controllers.js
49. AJAX using $http
⣠Use $http to perform an AJAX request
⣠The scope will automatically update itself
when $http returns gets a response
var app = angular.module('myApp', []);
app.controller('ColorsCtrl', function($scope, $http) {
$scope.colors = $http.get('/api/colors.json');
});
51. No more HTML mess
Todayâs websites have giant series of <div> with
extensive and exhaustive CSS, causing little
semantic clarity.
With Angular you can create your own tags and
attributes using Directives.
52. Directives
⣠Special custom components in HTML
⣠The directives can be placed in element
names, attributes, class names, as well as
comments.
⣠Directives are a way to teach HTML new
tricks.
<div my-precious-element></div>
53. Directives
⣠Handled in JavaScript via DOM manipulation
⣠A directive is just a function which executes
when the compiler encounters it in the DOM.
app.directive('myPreciousElement', function() {
return function($scope, element, attrs) {
element.bind('click', function() {
alert('clicked!');
});
};
});
54. Possible usage of directives
<rating max='5' model='stars.average'>
<tabs>
<tab title='Active tab' view='...'>
<tab title='Inactive tab' view='...'>
</tabs>
<tooltip content='messages.tip1'>
55. Built-in Directives
⣠AngularJS provides series of predefined HTML
components
⣠These components reduce much of the
JavaScript required to make HTML appear
dynamic
58. HTML Compiler
⣠Angularâs HTML compiler allows the
developer to teach the browser new HTML
syntax.
⣠The compiler allows you to attach behavior to
any HTML element or attribute and even
create new HTML elements or attributes with
custom behavior.
⣠Angular calls these behavior extensions
directives.
59. How the HTML Compiler works
⣠Compiler is an angular service which traverses
the DOM looking for attributes.
⣠The compilation process happens in two
phases:
⥠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.