angularjs basics with example

26
02 AngularJS Framework Analysis Public Code Repository by Sergey N. Bolshchikov http://bolshchikov.net [email protected] New ProImage, 2012

Upload: sergey-bolshchikov

Post on 01-Sep-2014

19.693 views

Category:

Technology


2 download

DESCRIPTION

AngularJS presentation covering basic ideas and concepts of the framework with vivid example.

TRANSCRIPT

Page 2: AngularJS Basics with Example

OutlineI. Introduction

II. Philosophy

Page 3: AngularJS Basics with Example

OutlineI. Introduction

II. Philosophy

No outline today

Just dive in

Page 4: AngularJS Basics with Example

IntroductionI want to build well structured and dynamic web application.

Header-Navigation Bar

Footer

Tree

Content Wrapper

Content

click

click

Page 5: AngularJS Basics with Example

IntroductionTraditional solution:

< 37% LOC

HTML> 63% LOCJavascript

Page 6: AngularJS Basics with Example

Philosophy● Angular is what HTML could have been if it had been designed for

applications.

● HTML is a great declarative language for static documents. It does not contain much in the way of creating application.

● Building web-applications is an exercise in what do I have to do, so that I trick the browser in to do what I want.

● That's why we have frameworks - set of utility functions and libraries for DOM manipulation.

● Angular takes another approach.

● Angular teaches the browser new syntax.

Page 7: AngularJS Basics with Example

IntroductionAngularJS solution:

< 59% LOCHTML

> 41% LOCJavascript

Page 8: AngularJS Basics with Example

Static HTML<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr> <td>1001</td><td>false</td><td>Do Groceries</td><td>01/08/12</td> </tr> <tr> <td>1002</td><td>false</td><td>Barber the cat</td><td>01/08/12</td> </tr> </tbody> </table></body></html>

See example live

Page 9: AngularJS Basics with Example

Declarative HTML<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped" ng-controller="TodoCtrl"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr ng-repeat="todo in todos"> <td ng-click="setTrue(todo.id)">{{todo.id}}</td> <td>{{todo.done}}</td> <td>{{todo.name}}</td> <td>{{todo.deadline}}</td> </tr> </tbody> </table>

</body></html> See example live

Page 10: AngularJS Basics with Example

Declarative HTML<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped" ng-controller="TodoCtrl"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr ng-repeat="todo in todos"> <td ng-click="setTrue(todo.id)">{{todo.id}}</td> <td>{{todo.done}}</td> <td>{{todo.name}}</td> <td>{{todo.deadline}}</td> </tr> </tbody> </table>

</body></html>

Page 11: AngularJS Basics with Example

Declarative HTML<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped" ng-controller="TodoCtrl"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr ng-repeat="todo in todos"> <td ng-click="setTrue(todo.id)">{{todo.id}}</td> <td>{{todo.done}}</td> <td>{{todo.name}}</td> <td>{{todo.deadline}}</td> </tr> </tbody> </table>

</body></html>

Page 12: AngularJS Basics with Example

Declarative HTML<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped" ng-controller="TodoCtrl"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr ng-repeat="todo in todos"> <td ng-click="setTrue(todo.id)">{{todo.id}}</td> <td>{{todo.done}}</td> <td>{{todo.name}}</td> <td>{{todo.deadline}}</td> </tr> </tbody> </table>

</body></html>

Page 13: AngularJS Basics with Example

Declarative HTML<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped" ng-controller="TodoCtrl"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr ng-repeat="todo in todos"> <td ng-click="setTrue(todo.id)">{{todo.id}}</td> <td>{{todo.done}}</td> <td>{{todo.name}}</td> <td>{{todo.deadline}}</td> </tr> </tbody> </table>

</body></html>

Page 14: AngularJS Basics with Example

MVCAngular says: "There are many ways to structure the code for an application. For Angular apps, we encourage the use of the Model-View-Controller (MVC) design pattern to decouple the code and to separate concerns. With that in mind, let's use a little Angular and JavaScript to add model, view, and controller components to our app."

Page 15: AngularJS Basics with Example

Controller○ a controller is a JavaScript function

○ It contains data

○ It specifies the behavior

○ It should contain only the business logic needed for a single view.

Page 16: AngularJS Basics with Example

Controller<table class="table table-stripped" ng-controller="TodoCtrl">function TodoCtrl(scope) { scope.todos = [ { 'id': 1001, 'done': false, 'name': 'Do Groceries', 'deadline': new Date() }, { 'id': 1002, 'done': false, 'name': 'Barber the cat', 'deadline': new Date() }]; scope.setTrue = function(id) { var el = (function(id){ for (var i=0; i<scope.todos.length; i++) { if (scope.todos[i].id === id) { return scope.todos[i] } } })(id); el.done = true; }}TodoCtrl.$inject = ['$scope'];

Page 17: AngularJS Basics with Example

Controller<table class="table table-stripped" ng-controller="TodoCtrl">function TodoCtrl(scope) { scope.todos = [ { 'id': 1001, 'done': false, 'name': 'Do Groceries', 'deadline': new Date() }, { 'id': 1002, 'done': false, 'name': 'Barber the cat', 'deadline': new Date() }]; scope.setTrue = function(id) { var el = (function(id){ for (var i=0; i<scope.todos.length; i++) { if (scope.todos[i].id === id) { return scope.todos[i] } } })(id); el.done = true; }}TodoCtrl.$inject = ['$scope'];

Page 18: AngularJS Basics with Example

Controller<table class="table table-stripped" ng-controller="TodoCtrl">function TodoCtrl(scope) { scope.todos = [ { 'id': 1001, 'done': false, 'name': 'Do Groceries', 'deadline': new Date() }, { 'id': 1002, 'done': false, 'name': 'Barber the cat', 'deadline': new Date() }]; scope.setTrue = function(id) { var el = (function(id){ for (var i=0; i<scope.todos.length; i++) { if (scope.todos[i].id === id) { return scope.todos[i] } } })(id); el.done = true; }}TodoCtrl.$inject = ['$scope'];

Page 19: AngularJS Basics with Example

Scope○ an object that refers to the application model

(application itself)

○ an execution context for expressions like {{ todo.name }}

○ Scopes are arranged in hierarchical structure which mimic the DOM structure of the application

○ Scopes can watch expressions and propagate events

Page 20: AngularJS Basics with Example

Scope

Template Model View

<html ng-app>

<table ng-controller="TodoCtrl">

<tr ng-repeat="todo in todos">

</html>

</table>

</tr>

<td>{{todo.id}}</td>

rootScope

TodoCtrlScope

RepeaterScopeRepeater

Scope

1001 false Groceries 01/08

1002 false Barber 01/08

Page 21: AngularJS Basics with Example

Controller<table class="table table-stripped" ng-controller="TodoCtrl">function TodoCtrl(scope) { scope.todos = [ { 'id': 1001, 'done': false, 'name': 'Do Groceries', 'deadline': new Date() }, { 'id': 1002, 'done': false, 'name': 'Barber the cat', 'deadline': new Date() }]; scope.setTrue = function(id) { var el = (function(id){ for (var i=0; i<scope.todos.length; i++) { if (scope.todos[i].id === id) { return scope.todos[i] } } })(id); el.done = true; }}TodoCtrl.$inject = ['$scope'];

Page 22: AngularJS Basics with Example

Model: attrs of Scope<table class="table table-stripped" ng-controller="TodoCtrl">function TodoCtrl(scope) { scope.todos = [ { 'id': 1001, 'done': false, 'name': 'Do Groceries', 'deadline': new Date() }, { 'id': 1002, 'done': false, 'name': 'Barber the cat', 'deadline': new Date() }]; scope.setTrue = function(id) { var el = (function(id){ for (var i=0; i<scope.todos.length; i++) { if (scope.todos[i].id === id) { return scope.todos[i] } } })(id); el.done = true; }}TodoCtrl.$inject = ['$scope'];

Model

Page 23: AngularJS Basics with Example

Template<!doctype html><html lang="en" ng-app><head> <meta charset="utf-8"> <title>My AngularJS App</title></head><body> <table class="table table-stripped" ng-controller="TodoCtrl"> <thead> <tr> <th>ID</th><th>Complete</th><th>Name</th><th>Deadline</th> </tr> </thead> <tbody> <tr ng-repeat="todo in todos"> <td ng-click="setTrue(todo.id)">{{todo.id}}</td> <td>{{todo.done}}</td> <td>{{todo.name}}</td> <td>{{todo.deadline}}</td> </tr> </tbody> </table>

</body></html>

Page 24: AngularJS Basics with Example

Data-binding and interaction

See live example

Page 25: AngularJS Basics with Example

Routing

angular.module('myApp'). config(['$routeProvider',

function($routeProvider) { $routeProvider.when(

'/folder/:name', {templateUrl: 'partials/folder.html' , controller: FolderCtrl

}); }])

Page 26: AngularJS Basics with Example

Performance● Browser support: IE 8+, Chrome, FF, Safari, Opera

● Framework size: 503KB

● Application size: 756KB