SlideShare a Scribd company logo
02 AngularJS
Framework Analysis
Public Code Repository




                                                               by
                                          Sergey N. Bolshchikov
                                           http://bolshchikov.net
                         sergey.bolshchikov@new-proimage.com
                                           New ProImage, 2012
Outline
 I.   Introduction
II.   Philosophy
Outline
 I.   Introduction
II.   Philosophy



                                     ay
                                  od
                               et
                           tlin in
                         ou ive
                     No t d
                      J us
Introduction
I want to build well structured and dynamic web application.

Header-Navigation Bar


                    Content Wrapper
    click

                                  click

 Tree
                        Content




Footer
Introduction
Traditional solution:




              < 37%
                        > 63% LOC
               LOC
                        Javascript
              HTML
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.
Introduction
AngularJS solution:




                          > 41%
              < 59% LOC    LOC
                 HTML      Java
                          script
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
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
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>
​
​
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>
​
​
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>
​
​
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>
​
​
MVC
Angular 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."
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.
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'];
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'];
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'];
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
Scope
<html ng-app>                        root
                                    Scope
                                                                             01/
                                                1001   false     Groceries
                                                                             08
<table ng-controller="TodoCtrl">
                                                                             01/
                                   TodoCtrl     1002   false      Barber
                                                                             08
  <tr ng-repeat="todo in todos">    Scope


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

                                   Repeater
       </tr>                         Repeater
                                    Scope
                                      Scope

   </table>



</html>

            Template               Model                       View
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'];
Model: attrs of Scope
<table class="table table-stripped" ng-controller="TodoCtrl">
function TodoCtrl(scope) {
    scope.todos = [
    {                                           Model
        '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'];
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>
​
​
Data-binding and interaction




See live example
Routing


angular.module('myApp').
    config(['$routeProvider' ,
         function($routeProvider ) {
             $routeProvider .when(
                 '/folder/:name' ,
                 {templateUrl : 'partials/folder.html' ,
                 controller : FolderCtrl
         });
    }])​
Performance
●   Browser support: IE 8+, Chrome, FF, Safari, Opera

●   Framework size: 503KB

●   Application size: 756KB
Ad

Recommended

PDF
AngularJS Framework
Barcamp Saigon
 
ODP
AngularJs Crash Course
Keith Bloomfield
 
PDF
AngularJS Basic Training
Cornel Stefanache
 
PPTX
AngularJS Architecture
Eyal Vardi
 
PPTX
AngularJs
syam kumar kk
 
PPTX
AngularJS Internal
Eyal Vardi
 
PPTX
AngularJS Directives
Eyal Vardi
 
PPTX
Practical AngularJS
Wei Ru
 
PDF
Workshop 12: AngularJS Parte I
Visual Engineering
 
PPTX
Angularjs Basics
Anuradha Bandara
 
PPTX
AngularJs $provide API internals & circular dependency problem.
Yan Yankowski
 
PDF
Building scalable applications with angular js
Andrew Alpert
 
PPTX
AngularJS with TypeScript and Windows Azure Mobile Services
Rainer Stropek
 
PPTX
AngularJS in 60ish Minutes
Dan Wahlin
 
PDF
GDayX - Advanced Angular.JS
Nicolas Embleton
 
PDF
Building Custom AngularJS Directives - A Step-by-Step Guide - Dan Wahlin | Fa...
FalafelSoftware
 
PDF
준비하세요 Angular js 2.0
Jeado Ko
 
PPTX
AngularJS $Provide Service
Eyal Vardi
 
PDF
Workshop 8: Templating: Handlebars, DustJS
Visual Engineering
 
PDF
Intro to Angular.JS Directives
Christian Lilley
 
PPTX
AngularJS Animations
Eyal Vardi
 
DOCX
Filters in AngularJS
Brajesh Yadav
 
PPTX
Modules and injector
Eyal Vardi
 
PPTX
Upgrading from Angular 1.x to Angular 2.x
Eyal Vardi
 
PDF
Difference between java script and jquery
Umar Ali
 
PDF
[FEConf Korea 2017]Angular 컴포넌트 대화법
Jeado Ko
 
PPTX
Building AngularJS Custom Directives
Dan Wahlin
 
PPTX
Workshop 1: Good practices in JavaScript
Visual Engineering
 
PPTX
Introduction to Angularjs
Manish Shekhawat
 
PDF
AngularJS 101 - Everything you need to know to get started
Stéphane Bégaudeau
 

More Related Content

What's hot (20)

PDF
Workshop 12: AngularJS Parte I
Visual Engineering
 
PPTX
Angularjs Basics
Anuradha Bandara
 
PPTX
AngularJs $provide API internals & circular dependency problem.
Yan Yankowski
 
PDF
Building scalable applications with angular js
Andrew Alpert
 
PPTX
AngularJS with TypeScript and Windows Azure Mobile Services
Rainer Stropek
 
PPTX
AngularJS in 60ish Minutes
Dan Wahlin
 
PDF
GDayX - Advanced Angular.JS
Nicolas Embleton
 
PDF
Building Custom AngularJS Directives - A Step-by-Step Guide - Dan Wahlin | Fa...
FalafelSoftware
 
PDF
준비하세요 Angular js 2.0
Jeado Ko
 
PPTX
AngularJS $Provide Service
Eyal Vardi
 
PDF
Workshop 8: Templating: Handlebars, DustJS
Visual Engineering
 
PDF
Intro to Angular.JS Directives
Christian Lilley
 
PPTX
AngularJS Animations
Eyal Vardi
 
DOCX
Filters in AngularJS
Brajesh Yadav
 
PPTX
Modules and injector
Eyal Vardi
 
PPTX
Upgrading from Angular 1.x to Angular 2.x
Eyal Vardi
 
PDF
Difference between java script and jquery
Umar Ali
 
PDF
[FEConf Korea 2017]Angular 컴포넌트 대화법
Jeado Ko
 
PPTX
Building AngularJS Custom Directives
Dan Wahlin
 
PPTX
Workshop 1: Good practices in JavaScript
Visual Engineering
 
Workshop 12: AngularJS Parte I
Visual Engineering
 
Angularjs Basics
Anuradha Bandara
 
AngularJs $provide API internals & circular dependency problem.
Yan Yankowski
 
Building scalable applications with angular js
Andrew Alpert
 
AngularJS with TypeScript and Windows Azure Mobile Services
Rainer Stropek
 
AngularJS in 60ish Minutes
Dan Wahlin
 
GDayX - Advanced Angular.JS
Nicolas Embleton
 
Building Custom AngularJS Directives - A Step-by-Step Guide - Dan Wahlin | Fa...
FalafelSoftware
 
준비하세요 Angular js 2.0
Jeado Ko
 
AngularJS $Provide Service
Eyal Vardi
 
Workshop 8: Templating: Handlebars, DustJS
Visual Engineering
 
Intro to Angular.JS Directives
Christian Lilley
 
AngularJS Animations
Eyal Vardi
 
Filters in AngularJS
Brajesh Yadav
 
Modules and injector
Eyal Vardi
 
Upgrading from Angular 1.x to Angular 2.x
Eyal Vardi
 
Difference between java script and jquery
Umar Ali
 
[FEConf Korea 2017]Angular 컴포넌트 대화법
Jeado Ko
 
Building AngularJS Custom Directives
Dan Wahlin
 
Workshop 1: Good practices in JavaScript
Visual Engineering
 

Viewers also liked (17)

PPTX
Introduction to Angularjs
Manish Shekhawat
 
PDF
AngularJS 101 - Everything you need to know to get started
Stéphane Bégaudeau
 
ODP
Introduction to Angular 2
Knoldus Inc.
 
PDF
스프링보다 중요한 스프링 이야기
Sungchul Park
 
PDF
Ember.js - A JavaScript framework for creating ambitious web applications
Juliana Lucena
 
PDF
Introduction To Single Page Application
KMS Technology
 
PPT
Get MEAN! Node.js and the MEAN stack
Nicholas McClay
 
PPTX
Building single page applications
SC5.io
 
PDF
Single Page Applications
Massimo Iacolare
 
PPT
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
MongoDB
 
PPTX
Single Page Application (SPA) using AngularJS
M R Rony
 
PDF
MEAN Stack
Krishnaprasad k
 
PPT
Single Page Application presentation
John Staveley
 
PDF
Does my DIV look big in this?
glen_a_smith
 
PDF
Introduction to the MEAN stack
Yoann Gotthilf
 
PDF
AngularJS application architecture
Gabriele Falace
 
PDF
SlideShare 101
Amit Ranjan
 
Introduction to Angularjs
Manish Shekhawat
 
AngularJS 101 - Everything you need to know to get started
Stéphane Bégaudeau
 
Introduction to Angular 2
Knoldus Inc.
 
스프링보다 중요한 스프링 이야기
Sungchul Park
 
Ember.js - A JavaScript framework for creating ambitious web applications
Juliana Lucena
 
Introduction To Single Page Application
KMS Technology
 
Get MEAN! Node.js and the MEAN stack
Nicholas McClay
 
Building single page applications
SC5.io
 
Single Page Applications
Massimo Iacolare
 
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
MongoDB
 
Single Page Application (SPA) using AngularJS
M R Rony
 
MEAN Stack
Krishnaprasad k
 
Single Page Application presentation
John Staveley
 
Does my DIV look big in this?
glen_a_smith
 
Introduction to the MEAN stack
Yoann Gotthilf
 
AngularJS application architecture
Gabriele Falace
 
SlideShare 101
Amit Ranjan
 
Ad

Similar to AngularJS Basics with Example (20)

PDF
Angular js - 4developers 12 kwietnia 2013
Marcin Wosinek
 
PPT
AngularJS Mobile Warsaw 20-10-2014
Dariusz Kalbarczyk
 
PDF
Introduction to AngularJS
Marco Vito Moscaritolo
 
PDF
Introduction to angular js
Marco Vito Moscaritolo
 
DOCX
Built in filters
Brajesh Yadav
 
PPTX
AngularJS
LearningTech
 
PPTX
Angular js
ParmarAnisha
 
PDF
Vaadin Components @ Angular U
Joonas Lehtinen
 
PPTX
JavaScript lesson 1.pptx
MuqaddarNiazi1
 
PDF
Building Reusable Custom Elements With Angular
Ilia Idakiev
 
PDF
Pengenalan AngularJS
Edi Santoso
 
PPT
What you forgot from your Computer Science Degree
Stephen Darlington
 
KEY
Summer - The HTML5 Library for Java and Scala
rostislav
 
DOCX
Controller in AngularJS
Brajesh Yadav
 
DOCX
Angular js
prasaddammalapati
 
PPTX
Rails, Postgres, Angular, and Bootstrap: The Power Stack
David Copeland
 
KEY
网站无障碍阅读知识
ppanyong
 
KEY
网站无障碍阅读知识
ppanyong
 
PDF
Reactive Type-safe WebComponents
Martin Hochel
 
PDF
Angular.js is super cool
Maksym Hopei
 
Angular js - 4developers 12 kwietnia 2013
Marcin Wosinek
 
AngularJS Mobile Warsaw 20-10-2014
Dariusz Kalbarczyk
 
Introduction to AngularJS
Marco Vito Moscaritolo
 
Introduction to angular js
Marco Vito Moscaritolo
 
Built in filters
Brajesh Yadav
 
AngularJS
LearningTech
 
Angular js
ParmarAnisha
 
Vaadin Components @ Angular U
Joonas Lehtinen
 
JavaScript lesson 1.pptx
MuqaddarNiazi1
 
Building Reusable Custom Elements With Angular
Ilia Idakiev
 
Pengenalan AngularJS
Edi Santoso
 
What you forgot from your Computer Science Degree
Stephen Darlington
 
Summer - The HTML5 Library for Java and Scala
rostislav
 
Controller in AngularJS
Brajesh Yadav
 
Angular js
prasaddammalapati
 
Rails, Postgres, Angular, and Bootstrap: The Power Stack
David Copeland
 
网站无障碍阅读知识
ppanyong
 
网站无障碍阅读知识
ppanyong
 
Reactive Type-safe WebComponents
Martin Hochel
 
Angular.js is super cool
Maksym Hopei
 
Ad

More from Sergey Bolshchikov (14)

PDF
Onboarding for Software Engineers Done Right
Sergey Bolshchikov
 
PDF
Pragmatic React Workshop
Sergey Bolshchikov
 
PDF
Microservices on the client side
Sergey Bolshchikov
 
PDF
ES2015 Quiz
Sergey Bolshchikov
 
PDF
Talking code: How To
Sergey Bolshchikov
 
PPTX
Values & Culture of Continuous Deliver
Sergey Bolshchikov
 
PDF
Protractor: Tips & Tricks
Sergey Bolshchikov
 
PDF
Continuous Delivery for Front-End Engineers
Sergey Bolshchikov
 
PDF
Зачем нужен EmberJS, если мне хвататет jQuery
Sergey Bolshchikov
 
PDF
Ember Reusable Components and Widgets
Sergey Bolshchikov
 
PDF
Front End Development: The Important Parts
Sergey Bolshchikov
 
PDF
Web Projects: From Theory To Practice
Sergey Bolshchikov
 
PDF
Backbone Basics with Examples
Sergey Bolshchikov
 
PDF
JS Single-Page Web App Essentials
Sergey Bolshchikov
 
Onboarding for Software Engineers Done Right
Sergey Bolshchikov
 
Pragmatic React Workshop
Sergey Bolshchikov
 
Microservices on the client side
Sergey Bolshchikov
 
ES2015 Quiz
Sergey Bolshchikov
 
Talking code: How To
Sergey Bolshchikov
 
Values & Culture of Continuous Deliver
Sergey Bolshchikov
 
Protractor: Tips & Tricks
Sergey Bolshchikov
 
Continuous Delivery for Front-End Engineers
Sergey Bolshchikov
 
Зачем нужен EmberJS, если мне хвататет jQuery
Sergey Bolshchikov
 
Ember Reusable Components and Widgets
Sergey Bolshchikov
 
Front End Development: The Important Parts
Sergey Bolshchikov
 
Web Projects: From Theory To Practice
Sergey Bolshchikov
 
Backbone Basics with Examples
Sergey Bolshchikov
 
JS Single-Page Web App Essentials
Sergey Bolshchikov
 

Recently uploaded (20)

PDF
Salesforce Summer '25 Release Frenchgathering.pptx.pdf
yosra Saidani
 
PDF
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
PDF
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
digitaljignect
 
PDF
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
PDF
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
PDF
Lessons Learned from Developing Secure AI Workflows.pdf
Priyanka Aash
 
PDF
The Growing Value and Application of FME & GenAI
Safe Software
 
PPTX
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
PPTX
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
PDF
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
PDF
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PDF
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
PDF
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
PDF
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
PDF
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
PDF
10 Key Challenges for AI within the EU Data Protection Framework.pdf
Priyanka Aash
 
PDF
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
Salesforce Summer '25 Release Frenchgathering.pptx.pdf
yosra Saidani
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
digitaljignect
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
Lessons Learned from Developing Secure AI Workflows.pdf
Priyanka Aash
 
The Growing Value and Application of FME & GenAI
Safe Software
 
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
10 Key Challenges for AI within the EU Data Protection Framework.pdf
Priyanka Aash
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 

AngularJS Basics with Example

  • 1. 02 AngularJS Framework Analysis Public Code Repository by Sergey N. Bolshchikov http://bolshchikov.net [email protected] New ProImage, 2012
  • 2. Outline I. Introduction II. Philosophy
  • 3. Outline I. Introduction II. Philosophy ay od et tlin in ou ive No t d J us
  • 4. Introduction I want to build well structured and dynamic web application. Header-Navigation Bar Content Wrapper click click Tree Content Footer
  • 5. Introduction Traditional solution: < 37% > 63% LOC LOC Javascript HTML
  • 6. 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.
  • 7. Introduction AngularJS solution: > 41% < 59% LOC LOC HTML Java script
  • 8. 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
  • 9. 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
  • 10. 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> ​ ​
  • 11. 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> ​ ​
  • 12. 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> ​ ​
  • 13. 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> ​ ​
  • 14. MVC Angular 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."
  • 15. 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.
  • 16. 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'];
  • 17. 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'];
  • 18. 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'];
  • 19. 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
  • 20. Scope <html ng-app> root Scope 01/ 1001 false Groceries 08 <table ng-controller="TodoCtrl"> 01/ TodoCtrl 1002 false Barber 08 <tr ng-repeat="todo in todos"> Scope <td>{{todo.id}}</td> Repeater </tr> Repeater Scope Scope </table> </html> Template Model View
  • 21. 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'];
  • 22. Model: attrs of Scope <table class="table table-stripped" ng-controller="TodoCtrl"> function TodoCtrl(scope) { scope.todos = [ { Model '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'];
  • 23. 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> ​ ​
  • 25. Routing angular.module('myApp'). config(['$routeProvider' , function($routeProvider ) { $routeProvider .when( '/folder/:name' , {templateUrl : 'partials/folder.html' , controller : FolderCtrl }); }])​
  • 26. Performance ● Browser support: IE 8+, Chrome, FF, Safari, Opera ● Framework size: 503KB ● Application size: 756KB