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

PPT
A Brief MongoDB Intro
PPTX
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
PPTX
Introduction towebmatrix
PPTX
Internet and Web Technology (CLASS-6) [BOM]
PPT
Using MongoDB With Groovy
PPT
Java Development with MongoDB (James Williams)
PPT
React.js 20150828
DOCX
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
A Brief MongoDB Intro
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Introduction towebmatrix
Internet and Web Technology (CLASS-6) [BOM]
Using MongoDB With Groovy
Java Development with MongoDB (James Williams)
React.js 20150828
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer

What's hot (15)

PPTX
Knockoutjs Part 4 Bindings Controlling text and appearance
ODP
MongoDB - Ekino PHP
PPTX
Mongo db – document oriented database
PDF
Mastering the MongoDB Shell
PDF
Mongophilly shell-2011-04-26
PPTX
Simple MongoDB design for Rails apps
PPTX
Rails + mongo db
PPTX
Broken Authentication and Session Management
PPTX
фабрика Blockly
PDF
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
PDF
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
PDF
Getting Started with JavaScript
PPTX
Mongo db Quick Guide
PPTX
KEYNOTE: Node.js interactive 2017 - The case for node.js
PPTX
Get expertise with mongo db
Knockoutjs Part 4 Bindings Controlling text and appearance
MongoDB - Ekino PHP
Mongo db – document oriented database
Mastering the MongoDB Shell
Mongophilly shell-2011-04-26
Simple MongoDB design for Rails apps
Rails + mongo db
Broken Authentication and Session Management
фабрика Blockly
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
Getting Started with JavaScript
Mongo db Quick Guide
KEYNOTE: Node.js interactive 2017 - The case for node.js
Get expertise with mongo db
Ad

Viewers also liked (8)

ODP
Sfd2012Hanoi Nguyễn Hà Dương - Introduction to Node.js
PPTX
Hands On Intro to Node.js
PPTX
JS Frameworks - Angular Vs Backbone
KEY
wwc start-launched
KEY
Node.js
KEY
PTW Rails Bootcamp
PDF
Ruby on the Phone
PDF
Introduction to AngularJS
Sfd2012Hanoi Nguyễn Hà Dương - Introduction to Node.js
Hands On Intro to Node.js
JS Frameworks - Angular Vs Backbone
wwc start-launched
Node.js
PTW Rails Bootcamp
Ruby on the Phone
Introduction to AngularJS
Ad

Similar to Knockout vs. angular (20)

PPTX
PPTX
Knockout.js
PDF
Knockout js session
PPTX
XAML/C# to HTML5/JS
PPTX
Knockout js
PPT
KnockoutJS and MVVM
PDF
Knockout in action
PPTX
Knockout implementing mvvm in java script with knockout
PDF
Knockoutjs databinding
PPTX
Mvvm knockout vs angular
PDF
Knockoutjs
PPTX
Bringing the light to the client with KnockoutJS
PPTX
MVVM Magic in SharePoint 2010 using Knockoutjs!
PPTX
Fundaments of Knockout js
PPTX
Knockout js
PPTX
Knockout js
PPTX
Knockoutjs Part 5 Bindings - Control flow
PDF
Building Better Web Apps with Angular.js (SXSW 2014)
PPTX
Responsive Views with Knockout
PDF
Client Side MVC & Angular
Knockout.js
Knockout js session
XAML/C# to HTML5/JS
Knockout js
KnockoutJS and MVVM
Knockout in action
Knockout implementing mvvm in java script with knockout
Knockoutjs databinding
Mvvm knockout vs angular
Knockoutjs
Bringing the light to the client with KnockoutJS
MVVM Magic in SharePoint 2010 using Knockoutjs!
Fundaments of Knockout js
Knockout js
Knockout js
Knockoutjs Part 5 Bindings - Control flow
Building Better Web Apps with Angular.js (SXSW 2014)
Responsive Views with Knockout
Client Side MVC & Angular

More from MaslowB (9)

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

Recently uploaded (20)

PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
PDF
Top Generative AI Tools for Patent Drafting in 2025.pdf
PPTX
Telecom Fraud Prevention Guide | Hyperlink InfoSystem
PDF
creating-agentic-ai-solutions-leveraging-aws.pdf
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
PDF
How Onsite IT Support Drives Business Efficiency, Security, and Growth.pdf
PDF
REPORT: Heating appliances market in Poland 2024
PDF
Transforming Manufacturing operations through Intelligent Integrations
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
How Much Does It Cost to Build a Train Ticket App like Trenitalia in Italy.pptx
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PDF
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
This slide provides an overview Technology
PDF
Software Development Methodologies in 2025
PDF
NewMind AI Weekly Chronicles - August'25 Week I
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
NewMind AI Weekly Chronicles - July'25 - Week IV
Top Generative AI Tools for Patent Drafting in 2025.pdf
Telecom Fraud Prevention Guide | Hyperlink InfoSystem
creating-agentic-ai-solutions-leveraging-aws.pdf
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
How Onsite IT Support Drives Business Efficiency, Security, and Growth.pdf
REPORT: Heating appliances market in Poland 2024
Transforming Manufacturing operations through Intelligent Integrations
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Understanding_Digital_Forensics_Presentation.pptx
How Much Does It Cost to Build a Train Ticket App like Trenitalia in Italy.pptx
GamePlan Trading System Review: Professional Trader's Honest Take
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
This slide provides an overview Technology
Software Development Methodologies in 2025
NewMind AI Weekly Chronicles - August'25 Week I

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/