SlideShare a Scribd company logo
Vs.
by Brandon D'Imperio
About the presenter
https://coderbits.com/Maslow/
http://www.slideshare.net/MaslowB/
https://nuget.org/profiles/MaslowB/
Knockout
● Inspired by what was already there in the
XAML world
● Declarative Bindings
○ <span data-bind="text:firstname"></span>
● Automatic UI Refresh
○ self.firstname("george"); //automatically changes
the span text
● Dependency Tracking
○ self.name=ko.computed(function(){
■ return self.firstname()+self.lastname();
○ });
Knockout 2
● Templating
○ <ul data-bind="foreach:person">
■ <li data-bind="text:firstname">
○ </ul>
● Initialization
○ var komodel=new PeopleModel();
○ ko.applyBindings(komodel);
Knockout Model
● MVVM
○ 2 way communication with the view
○ The ViewModel represents the view. This means
that fields in a ViewModel usually match up more
closely with the view than with the model.
○ View Communication: There is no IView reference
in the ViewModel. Instead, the view binds directly to
the ViewModel. Because of the binding, changes in
the view are automatically reflected in the
ViewModel and changes in the ViewModel are
automatically reflected in the view.
○ There is a single ViewModel for each view
Knockout Html
Knockout Code
Knockout issues
● self.name= oops
○ self.name('is the setter');
● binding magic variables
○ $data,$parent,$root
● everything is done in one attribute
○ data-bind="text:name,attr:{title:name,'data-id':
personId},click:nameclick"
○ there are addons to help with this
● Code at http://embed.plnkr.co/Gs4U8m/preview
Angular
● Declarative bindings
○ <span>{{newPerson.firstname}}</span>
● Automatic UI Refresh
○ $scope.firstname='george';
○ KO dependency tracking is a clever feature fo
problem which angular does not have.
● MVC
○ Angular likes to say MV*
Angular 2
● Dependency Tracking
○ $scope.fullname=function(){
■ return $scope.firstname+' '+$scope.lastname;
○ };
● Templating
○ <ul ng-repeat="person in people">
■ <li title="person.fullname()"> {{person.
firstname}} </li>
○ </ul>
● Embeddable
○ no global state, multiple angular apps in one page
with no iframe.
Angular 3
● Injectable
○ no main() method
○ Dependency Injection is core
● Testable
○ encourages behavior-view separation
○ pre-bundled with mocks
● Loads more built-in stuff
○ Pluralization Helper
○ Localization Helper
○ Currency and date formatting
○ Script based templating
Angular Issues
● There's so much going on here
○ Is this enterprise library?
○ or `lightweight` emberJs?
● slightly non-predictable directive naming
○ ng-mousedown
○ ng-class-even
● too many ways to do similar or the same
things
○ ngBind vs. {{text}}
○ ng-bind vs. data-ng-bind vs. class="ng-class:
{expression};"
○ ng-bind-template vs. {{text}} {{moretext}}!
Angular Html
Angular Code
Html Comparison
<body>
<ul data-bind="foreach:people">
<li data-bind="text:firstname,attr:
{title:lastname}"></li>
</ul>
<div data-role="add a new person" data-
bind="with:newPerson">
<input data-bind="value:firstname,
valueUpdate:'afterkeydown'"/>
<span data-bind="text:firstname"></span>
<div data-bind="text:fullname"></div>
<input type="button" data-bind="
click:$root.addPerson" value="add"/>
<!-- sample complex binding -->
<div data-bind="text:fullname,attr:
{title:fullname,'data-id':personId},
click:$root.addPerson"></div>
</div> </body>
<body ng-app ng-controller="PersonCtrl">
<ul>
<li ng-repeat="person in people"
title="{{person.lastname}}">{{person.
firstname}}</li>
</ul>
<div data-role="add a new person">
<input ng-model="newPerson.firstname"/>
<span ng-bind="newPerson.firstname"
></span>
<div>{{newPerson.fullname()}}</div>
<input type="button" value="add" ng-
click="addPerson()"/>
</div>
<!-- sample complex binding -->
<div title="{{newPerson.fullname}}" data-
id="{{newPerson.personId}}" ng-click="
addPerson()">{{newPerson.firstname}}</div>
</body>
Code Comparsion
var PersonModel= function(first,last,id) {
var self=this;
self.personId=ko.observable(id);
self.firstname=ko.observable(first);
self.lastname=ko.observable(last);
self.fullname=ko.computed(function(){
return self.firstname()+' '+self.
lastname();
});};
var PeopleModel= function(){
var self=this;
self.newPerson=ko.observable(new
PersonModel('bob','knoblin',1));
self.people=ko.observableArray();
self.addPerson=function(){
self.people.push(self.newPerson());
self.newPerson(new PersonModel
('jane','dough',self.people().length+1));
};
}; var komodel=new PeopleModel(); ko.
applyBindings(komodel);
var angularmodel;
var PersonCtrl= function($scope) {
var PersonModel=function(first,last,id){
var self=this;
self.firstname=first;
self.lastname=last;
self.personId=id || 0;
self.fullname=function(){
return self.firstname+' '+self.
lastname;
}; };
$scope.people=[];
$scope.newPerson=new PersonModel
('bob','knoblin',1);
$scope.addPerson=function(){
$scope.people.push($scope.newPerson);
$scope.newPerson=new PersonModel
('jane','dough',$scope.people.length+1);
};
angularmodel=$scope; };
Similarities
● Fast friendly data-binding
● attribute-based binding
● both can be fully html5 compliant
● custom directives
● Both are better than using jQuery for most
things
● Both may occasionally benefit from a
sprinkling of jQuery
Differences
● Large adoption on knockout
● Angular is backed by google
● MVVM vs. MVC
● Push Model vs. dirty checking
● Angular has a dedicated debugging tool -
Batarang
Knockout vs. Angular
● Far more
lightweight
● Easier to learn
● Focuses on one
area
● Much better
documentation
● Should be faster
● More backwards
(+IE) compat
● Concerns are better
separated
○ attributes and
controller/views
● Has a bigger
toolbox
● Does binding and
mvc
● Better initialization
story
Popularity
Knockout - More question tags on
Stackoverflow in Feb, as of today: 5904 vs 6554
Angular - more stars on github
10k vs. 3.7k and google searches
References
● http://joel.inpointform.net/software-development/mvvm-
vs-mvp-vs-mvc-the-differences-explained/
● http://www.slideshare.net/basarat1/mvvm-knockout-vs-
angular
● http://stackoverflow.
com/questions/9682092/databinding-in-angularjs
● http://odetocode.
com/blogs/scott/archive/2013/02/26/why-use-angularjs.
aspx
● http://jsperf.com/angularjs-vs-knockoutjs
● http://codeutopia.net/blog/2013/03/16/knockout-vs-
backbone-vs-angular/

More Related Content

What's hot (15)

PPTX
Knockoutjs Part 4 Bindings Controlling text and appearance
Bhaumik Patel
 
ODP
MongoDB - Ekino PHP
Florent DENIS
 
PPTX
Mongo db – document oriented database
Wojciech Sznapka
 
PDF
Mastering the MongoDB Shell
MongoDB
 
PDF
Mongophilly shell-2011-04-26
kreuter
 
PPTX
Simple MongoDB design for Rails apps
Sérgio Santos
 
PPTX
Rails + mongo db
Sérgio Santos
 
PPTX
Broken Authentication and Session Management
SongchaiDuangpan
 
PPTX
фабрика Blockly
Евгений Белов
 
PDF
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
Horacio Gonzalez
 
PDF
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
Horacio Gonzalez
 
PDF
Getting Started with JavaScript
Kevin Hoyt
 
PPTX
Mongo db Quick Guide
Sourabh Sahu
 
PPTX
KEYNOTE: Node.js interactive 2017 - The case for node.js
Justin Beckwith
 
PPTX
Get expertise with mongo db
Amit Thakkar
 
Knockoutjs Part 4 Bindings Controlling text and appearance
Bhaumik Patel
 
MongoDB - Ekino PHP
Florent DENIS
 
Mongo db – document oriented database
Wojciech Sznapka
 
Mastering the MongoDB Shell
MongoDB
 
Mongophilly shell-2011-04-26
kreuter
 
Simple MongoDB design for Rails apps
Sérgio Santos
 
Rails + mongo db
Sérgio Santos
 
Broken Authentication and Session Management
SongchaiDuangpan
 
фабрика Blockly
Евгений Белов
 
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
Horacio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
Horacio Gonzalez
 
Getting Started with JavaScript
Kevin Hoyt
 
Mongo db Quick Guide
Sourabh Sahu
 
KEYNOTE: Node.js interactive 2017 - The case for node.js
Justin Beckwith
 
Get expertise with mongo db
Amit Thakkar
 

Viewers also liked (8)

ODP
Sfd2012Hanoi Nguyễn Hà Dương - Introduction to Node.js
Vu Hung Nguyen
 
PPTX
Hands On Intro to Node.js
Chris Cowan
 
PPTX
JS Frameworks - Angular Vs Backbone
Gourav Jain, MCTS®
 
KEY
wwc start-launched
Mat Schaffer
 
KEY
Node.js
Mat Schaffer
 
KEY
PTW Rails Bootcamp
Mat Schaffer
 
PDF
Ruby on the Phone
Mat Schaffer
 
PDF
Introduction to AngularJS
Jamal Sinclair O'Garro
 
Sfd2012Hanoi Nguyễn Hà Dương - Introduction to Node.js
Vu Hung Nguyen
 
Hands On Intro to Node.js
Chris Cowan
 
JS Frameworks - Angular Vs Backbone
Gourav Jain, MCTS®
 
wwc start-launched
Mat Schaffer
 
Node.js
Mat Schaffer
 
PTW Rails Bootcamp
Mat Schaffer
 
Ruby on the Phone
Mat Schaffer
 
Introduction to AngularJS
Jamal Sinclair O'Garro
 
Ad

Similar to Knockout vs. angular (20)

PDF
The Ring programming language version 1.10 book - Part 53 of 212
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.3 book - Part 43 of 184
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.3 book - Part 53 of 184
Mahmoud Samir Fayed
 
PDF
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
Mario Heiderich
 
PDF
Nicolas Embleton, Advanced Angular JS
JavaScript Meetup HCMC
 
PDF
GDayX - Advanced Angular.JS
Nicolas Embleton
 
PDF
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack
 
PDF
A gentle intro to the Django Framework
Ricardo Soares
 
PDF
Knockout mvvm-m5-slides
MasterCode.vn
 
PDF
gDayX - Advanced angularjs
gdgvietnam
 
PPTX
Javascript note for engineering notes.pptx
engineeradda55
 
PDF
AngularJS Workshop
Gianluca Cacace
 
PDF
AngularJS Basics
Manaday Mavani
 
PPTX
Introduction to HTML+CSS+Javascript.pptx
deepuranjankumar2002
 
PDF
Drupalcamp performance
Frontkom
 
PDF
Dive into AngularJS and directives
Tricode (part of Dept)
 
PPTX
moma-django overview --> Django + MongoDB: building a custom ORM layer
Gadi Oren
 
PPTX
Knockout.js
Vivek Rajan
 
PDF
Back to Basics 2017: Mí primera aplicación MongoDB
MongoDB
 
PDF
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
George Nguyen
 
The Ring programming language version 1.10 book - Part 53 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 43 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 53 of 184
Mahmoud Samir Fayed
 
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
Mario Heiderich
 
Nicolas Embleton, Advanced Angular JS
JavaScript Meetup HCMC
 
GDayX - Advanced Angular.JS
Nicolas Embleton
 
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack
 
A gentle intro to the Django Framework
Ricardo Soares
 
Knockout mvvm-m5-slides
MasterCode.vn
 
gDayX - Advanced angularjs
gdgvietnam
 
Javascript note for engineering notes.pptx
engineeradda55
 
AngularJS Workshop
Gianluca Cacace
 
AngularJS Basics
Manaday Mavani
 
Introduction to HTML+CSS+Javascript.pptx
deepuranjankumar2002
 
Drupalcamp performance
Frontkom
 
Dive into AngularJS and directives
Tricode (part of Dept)
 
moma-django overview --> Django + MongoDB: building a custom ORM layer
Gadi Oren
 
Knockout.js
Vivek Rajan
 
Back to Basics 2017: Mí primera aplicación MongoDB
MongoDB
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
George Nguyen
 
Ad

More from MaslowB (9)

PPTX
F# for BLOBA, by brandon d'imperio
MaslowB
 
PDF
Js testing
MaslowB
 
PPTX
Type mock isolator
MaslowB
 
PPTX
What’s new mvc 4
MaslowB
 
PPT
A clean repository pattern in ef
MaslowB
 
PPTX
Metrics
MaslowB
 
PPTX
Type mock isolator
MaslowB
 
PPTX
Mvc presentation
MaslowB
 
PPT
Metaprogramming by brandon
MaslowB
 
F# for BLOBA, by brandon d'imperio
MaslowB
 
Js testing
MaslowB
 
Type mock isolator
MaslowB
 
What’s new mvc 4
MaslowB
 
A clean repository pattern in ef
MaslowB
 
Metrics
MaslowB
 
Type mock isolator
MaslowB
 
Mvc presentation
MaslowB
 
Metaprogramming by brandon
MaslowB
 

Recently uploaded (20)

PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 

Knockout vs. angular

  • 3. Knockout ● Inspired by what was already there in the XAML world ● Declarative Bindings ○ <span data-bind="text:firstname"></span> ● Automatic UI Refresh ○ self.firstname("george"); //automatically changes the span text ● Dependency Tracking ○ self.name=ko.computed(function(){ ■ return self.firstname()+self.lastname(); ○ });
  • 4. Knockout 2 ● Templating ○ <ul data-bind="foreach:person"> ■ <li data-bind="text:firstname"> ○ </ul> ● Initialization ○ var komodel=new PeopleModel(); ○ ko.applyBindings(komodel);
  • 5. Knockout Model ● MVVM ○ 2 way communication with the view ○ The ViewModel represents the view. This means that fields in a ViewModel usually match up more closely with the view than with the model. ○ View Communication: There is no IView reference in the ViewModel. Instead, the view binds directly to the ViewModel. Because of the binding, changes in the view are automatically reflected in the ViewModel and changes in the ViewModel are automatically reflected in the view. ○ There is a single ViewModel for each view
  • 8. Knockout issues ● self.name= oops ○ self.name('is the setter'); ● binding magic variables ○ $data,$parent,$root ● everything is done in one attribute ○ data-bind="text:name,attr:{title:name,'data-id': personId},click:nameclick" ○ there are addons to help with this ● Code at http://embed.plnkr.co/Gs4U8m/preview
  • 9. Angular ● Declarative bindings ○ <span>{{newPerson.firstname}}</span> ● Automatic UI Refresh ○ $scope.firstname='george'; ○ KO dependency tracking is a clever feature fo problem which angular does not have. ● MVC ○ Angular likes to say MV*
  • 10. Angular 2 ● Dependency Tracking ○ $scope.fullname=function(){ ■ return $scope.firstname+' '+$scope.lastname; ○ }; ● Templating ○ <ul ng-repeat="person in people"> ■ <li title="person.fullname()"> {{person. firstname}} </li> ○ </ul> ● Embeddable ○ no global state, multiple angular apps in one page with no iframe.
  • 11. Angular 3 ● Injectable ○ no main() method ○ Dependency Injection is core ● Testable ○ encourages behavior-view separation ○ pre-bundled with mocks ● Loads more built-in stuff ○ Pluralization Helper ○ Localization Helper ○ Currency and date formatting ○ Script based templating
  • 12. Angular Issues ● There's so much going on here ○ Is this enterprise library? ○ or `lightweight` emberJs? ● slightly non-predictable directive naming ○ ng-mousedown ○ ng-class-even ● too many ways to do similar or the same things ○ ngBind vs. {{text}} ○ ng-bind vs. data-ng-bind vs. class="ng-class: {expression};" ○ ng-bind-template vs. {{text}} {{moretext}}!
  • 15. Html Comparison <body> <ul data-bind="foreach:people"> <li data-bind="text:firstname,attr: {title:lastname}"></li> </ul> <div data-role="add a new person" data- bind="with:newPerson"> <input data-bind="value:firstname, valueUpdate:'afterkeydown'"/> <span data-bind="text:firstname"></span> <div data-bind="text:fullname"></div> <input type="button" data-bind=" click:$root.addPerson" value="add"/> <!-- sample complex binding --> <div data-bind="text:fullname,attr: {title:fullname,'data-id':personId}, click:$root.addPerson"></div> </div> </body> <body ng-app ng-controller="PersonCtrl"> <ul> <li ng-repeat="person in people" title="{{person.lastname}}">{{person. firstname}}</li> </ul> <div data-role="add a new person"> <input ng-model="newPerson.firstname"/> <span ng-bind="newPerson.firstname" ></span> <div>{{newPerson.fullname()}}</div> <input type="button" value="add" ng- click="addPerson()"/> </div> <!-- sample complex binding --> <div title="{{newPerson.fullname}}" data- id="{{newPerson.personId}}" ng-click=" addPerson()">{{newPerson.firstname}}</div> </body>
  • 16. Code Comparsion var PersonModel= function(first,last,id) { var self=this; self.personId=ko.observable(id); self.firstname=ko.observable(first); self.lastname=ko.observable(last); self.fullname=ko.computed(function(){ return self.firstname()+' '+self. lastname(); });}; var PeopleModel= function(){ var self=this; self.newPerson=ko.observable(new PersonModel('bob','knoblin',1)); self.people=ko.observableArray(); self.addPerson=function(){ self.people.push(self.newPerson()); self.newPerson(new PersonModel ('jane','dough',self.people().length+1)); }; }; var komodel=new PeopleModel(); ko. applyBindings(komodel); var angularmodel; var PersonCtrl= function($scope) { var PersonModel=function(first,last,id){ var self=this; self.firstname=first; self.lastname=last; self.personId=id || 0; self.fullname=function(){ return self.firstname+' '+self. lastname; }; }; $scope.people=[]; $scope.newPerson=new PersonModel ('bob','knoblin',1); $scope.addPerson=function(){ $scope.people.push($scope.newPerson); $scope.newPerson=new PersonModel ('jane','dough',$scope.people.length+1); }; angularmodel=$scope; };
  • 17. Similarities ● Fast friendly data-binding ● attribute-based binding ● both can be fully html5 compliant ● custom directives ● Both are better than using jQuery for most things ● Both may occasionally benefit from a sprinkling of jQuery
  • 18. Differences ● Large adoption on knockout ● Angular is backed by google ● MVVM vs. MVC ● Push Model vs. dirty checking ● Angular has a dedicated debugging tool - Batarang
  • 19. Knockout vs. Angular ● Far more lightweight ● Easier to learn ● Focuses on one area ● Much better documentation ● Should be faster ● More backwards (+IE) compat ● Concerns are better separated ○ attributes and controller/views ● Has a bigger toolbox ● Does binding and mvc ● Better initialization story
  • 20. Popularity Knockout - More question tags on Stackoverflow in Feb, as of today: 5904 vs 6554 Angular - more stars on github 10k vs. 3.7k and google searches
  • 21. References ● http://joel.inpointform.net/software-development/mvvm- vs-mvp-vs-mvc-the-differences-explained/ ● http://www.slideshare.net/basarat1/mvvm-knockout-vs- angular ● http://stackoverflow. com/questions/9682092/databinding-in-angularjs ● http://odetocode. com/blogs/scott/archive/2013/02/26/why-use-angularjs. aspx ● http://jsperf.com/angularjs-vs-knockoutjs ● http://codeutopia.net/blog/2013/03/16/knockout-vs- backbone-vs-angular/