SlideShare a Scribd company logo
Building ColdFusion and 
AngularJS Applications 
Mike Collins 
SupportObjective 
CFSummit 
October 2014
Today’s Agenda 
Walkthrough Requirements for a CF AngularJS 
Application 
Build our ColdFusion REST Server side 
 Building the API 
 Testing the API 
Build AngularJS the Client side 
Intro to AngularJS 
Core AngularJS features 
Build and Demo AngularJS using CF REST 
Wrap up
Our Project Requirements 
Player Registration Application 
– New Player Registration 
– Player Manager 
– ColdFusion 11 Server Side 
– AngularJS 1.3 Client Side 
– Use SQL DB to store data 
– Use REST API with JSON
Client-side and Server-side 
FRONTEND BACKEND 
Angular Clients 
JSON 
JSON 
REST API to receive 
Use $http service to and deliver JSON 
call backend REST 
API
Team Development Approach 
• The Client-side team and Server-Side team met and 
decided on an API 
• Parallel independent development 
• The Client side will use AngularJS ngMock to mock 
server-side communication until server side is ready 
• Server-side can test the REST API using cfhttp or 
jMeter to test until the client side is ready
Building the ColdFusion 
REST based Server Side
ColdFusion Server Side Features 
• What does CF bring to the server side 
• ColdFusion RESTFUL Features 
• Provide your applications dynamic pages 
• Backend Integration to JDBC, LDAP, Web 
Services, Email, PDF Services, JSON 
• Improve Security with encrypted request tokens 
• Seed applications with initial loading of data 
• Dynamically build AngularJS apps with CF
ColdFusion RESTful Features 
• New feature added in CF10 
• Ability to create REST services by defining certain 
attributes in the tags 
– cfcomponent 
– cffuntion 
– cfargument 
• RESTful Function Signatures 
• Supports JSON and XML serialization/deserialization 
• Client applications can consume REST services by 
issuing HTTP/HTTPS requests format 
• Also - other CF REST options exist such as TAFFY
Creating a CF REST Component 
1. Define CFC as REST and define a restpath attribute 
<cfcomponent rest="true" restpath="playerService"> 
2. Define REST function 3. Define REST 
<cffunction 
name="getPlayer" 
access="remote“ 
httpmethod="GET“ 
restpath="getPlayer/{playerID}" 
returntype="any" 
produces="application/json"> 
function arguments 
<cfargument 
name="playerID“ 
required="true" 
restargsource="Path" 
type="numeric"/ >
Understanding RestArgPath 
• CFFunction aguments can be retrieved from 
multiple places 
• Path, Query String, Form, Cookie, Header 
<cfargument 
name="playerID“ 
required="true" 
restargsource="Path" 
type="numeric"/ >
REST Component Registration 
• Need to register your REST CFCs in CFAdmin 
• Using 2 new settings in Application.cfc 
– <cfset this.restsettings.cfclocation = “./, ./rest"> 
– <cfset this.restsettings.skipcfcwitherror = true>
Processing REST Requests 
• /Rest is a new servlet mapping in web.xml 
• How REST requests are processed with 
Application.cfc 
Method Processed 
OnRequestStart Yes 
OnRequest No 
OnError Yes 
OnCFCRequest No 
OnRequestEnd Yes
CF RESTful HTTP Post Example 
AngularJS APP 
<cffunction name="newPlayer" 
access="remote" 
httpmethod="POST" 
restpath="newPlayer" returntype="any" returnformat="json"> 
<cfargument name="playerData" required="true" type="string" /> 
<cfif not isJSON(arguments.playerData)> 
<cfreturn errorjson("-1000","Request Error Code 1000 - Invalid JSON 
#arguments.playerData#")> 
</cfif> 
<!--- Deserialize JSON ---> 
<cfset jsondata = deserializeJSON( arguments.playerData )> 
…
ColdFusion 11 JSON Improvements 
• JSON improvements 
– Data type preservation for Query and CFC 
– Case preservation of struct keys 
– Added "Struct" as new QueryFormat 
• Which is the format AngularJS expects 
– Ability to define custom JSON serializer 
http://blogs.coldfusion.com/post.cfm/language-enhancements-in-coldfusion-splendor-improved-json-serialization-2
Server-side Testing 
• CFHTTP scripts 
• jMeter Load Testing
About AngularJS
About AngularJS 
• Adapts and extends HTML 
• Some of the key features: 
– two-way data-binding 
– synchronizes model data and views 
– Filters for client side data 
– http  ajax call features 
• Follows a MVC pattern 
– loose coupling between presentation, data, 
and logic components. 
• A complete client-side JavaScript solution 
• Managed by a developer team at Google 
Igor and Miska from 
Google
AngularJS Application Framework
AngularJS Popularity 
Project contributors per month
AngularJS Reach 
• Browser support 
– Safari 
– Chrome 
– Firefox 
– Opera 
– IE8, IE9 
– Mobile browsers Android, 
Chrome Mobile, iOS Safari 
• AngularJS 1.3 does not 
support IE 8
Getting AngularJS 
Go to Angularjs.org to download 
http://angularjs.org
Optional Add-on Modules 
• Loaded after the coreangular.js file: 
– angular-animate.js - Enable animation support 
– angular-cookies.js - A convenient wrapper for reading and 
writing browser cookies 
– angular-resource.js - Interaction support with RESTful 
services via the $resource service 
– angular-route.js - Routing and deep linking services and 
directives for angular apps 
– angular-sanitize.js - Functionality to sanitize HTML 
– angular-touch.js - Touch events and other helpers for 
touch-enabled devices 
– New angular-messages.js – helps with displaying 
informative error messages with forms
Works well with Others
Many Server-side Integration Points 
Angular Clients 
http 
resource 
websockets 
services 
factories 
restful 
Cloud Services
A Simple AngularJS App 
<script type="text/javascript" src="/js/angular.min.js"></script> 
<h1>Simple Data Binding with AngularJS</h1> 
<div ng-app> 
Name: <input type="text" ng-model="name" /> 
Welcome to AngularJS {{name}} 
</div> 
http://cfangular.com/simple/databinding.cfm
Getting Started Resources 
• Dan Wahlin – AngularJS in 60ish Minutes 
– https://www.youtube.com/watch?v=i9MHigUZKEM 
• All the ng-conf sessions 
– https://www.youtube.com/results?search_query=ng-conf 
• AngularJS FAQ 
– https://docs.angularjs.org/misc/faq
Building the AngularJS Frontend
Frontend / Clientside Team 
• They have been busy writing the front end using 
ngMock waiting for the Server API to be 
completed 
– ngMock as an AngularJS module to mock backend 
communication 
• Now let’s hook the frontend with the ColdFusion 
REST server api 
• Check out this blog for using ngmock with CF 
– http://www.sagarganatra.com/2014/06/angularjs-resolving-data-services.html
AngularJS Startup 
• Loading an AngularJS page builds our 
scopes and bindings 
Backend Providers 
SERVER REST API 
Datastore
AngularJS Features the team used 
2 way Data Binding 
Model - Form 
Filters 
Player Finder 
Controllers 
Each route gets its own 
ngRoute – ngView 
Load dynamic CF pages 
Ng-repeat Directive 
Custom Date Directive 
$http service 
Get and Post JSON 
$http interceptor 
Catch all server traffic 
Form Processing 
Validation and messaging 
Built in Form CSS Classes 
Ng-show directive 
Ng-disable directive
Our AngularJS Home 
<html ng-app="playerApp"> 
<head> 
<!-- Load CSS other JS here--> 
<!-- Load Angular and Angular Routes Module --> 
<script src="vendor/angular.min.js"></script> 
<script src="vendor/angular-route.min.js"></script> 
<!-- Load main AngularJS application js --> 
<script src="js/app.js"></script> 
</head> 
<body ng-controller="mainController"> 
--- 
</body> 
</html>
Routes and Controllers and ngView 
<body ng-controller="mainController"> 
<nav class="navbar navbar-default"> 
<div class="container"> 
<div class="navbar-header"> 
<a class="navbar-brand" href="/">Player Registration Manager</a> 
</div> 
<ul class="nav navbar-nav navbar-right"> 
<li><a href="#"><i class="fa fa-home"></i> Home</a></li> 
<li><a href="#register"><i class="fa fa-shield"></i> Register Player</a></li> 
<li><a href="#manager"><i class="fa fa-comment"></i> Manager Players</a></li> 
</ul> 
</div> 
</nav> 
<div id="main"> 
<div ng-view class="parialview"></div> 
</div> 
</body>
Using Routes and Controllers 
mainController 
playerApp.controller('mainController', 
function($scope) { 
$scope.message = 'I am the home 
page!'; 
}); 
Home.cfm 
<div class="jumbotron text-center"> 
<h1>Home Page</h1> 
<p>{{ message }}</p> 
</div> 
http://cfangular.com/playerapp/ 
App.js 
playerApp.config(function($routeProvider) { 
$routeProvider 
// route for the home page 
.when('/', { 
templateUrl : 'partials/home.cfm', 
controller : 'mainController' 
}) 
// route for the register page 
.when('/register', { 
templateUrl : 'partials/register.cfm', 
controller : 'registerController' 
}) 
// route for the player manager page 
.when('/manager', { 
templateUrl : 'partials/manager.cfm', 
controller : 'managerController' 
}); 
});
AngularJS $http Features 
• $http Caching 
• $http Interceptors 
• $http Headers 
• $http Security 
– Built in JSON vulnerability protection 
– Built in XSRF protection
Calling the ColdFusion RESTful API 
$scope.updatePlayer = function() { 
if ($scope.manageForm.$valid){ 
$http.post('/rest/playerService/updatePlayer?callback=JSON_CALLBACK', 
$scope.player). 
success(function(data, status) { 
$scope.status = data.status; 
$scope.message = data.message; 
}) 
.error(function(data, status) { 
alert(data.MESSAGE ); 
$scope.data = data || "Update failed"; 
$scope.status = status; 
}) 
} 
else{ 
alert('Please correct fields in red and then resubmit form'); 
} 
}
Using a AngularJS Filters 
• We call into CF and load the playerlist array 
• Define the filter for a data listing 
<tr class="playerRow" ng-repeat="p in playerList | filter:search | 
orderBy:'playerfirstname' " ng-click="getPlayer(p.id)"> 
<td>{{p.playerfirstname | uppercase}} {{p.playerlastname}}</td> 
<td>{{p.playerleague}}</td> <td>{{p.currentteam}}</td> 
</tr> 
• Assign the filter to some user input 
Search: <input ng-model="search.$"> 
<select data-ng-model="search.currentteam"> 
<option ng-repeat="t in teams“ value="{{t.name}}">{{t.name}}</option> 
</select> 
• When user selects a team only players on that team appear
AngularJS Form Features 
• Built-in CSS classes 
– ng-valid, ng-invalid, ng-pristine, ng-dirty 
• Built-in Validations 
– url, email, max, maxlength, min, minlength, number, pattern, 
required 
• Input Properties 
– $valid, $invalid, $pristine, $dirty 
– $error{} – contains field data for all invalid fields 
– ngmessages – new in 1.3 
https://docs.angularjs.org/api/ngMessages 
• Methods 
– $setValidity(), $setPristine(), $setDirty(),$addControl(), 
$removeControl()
ngModel and Form Bindings 
$scope.search = ''; 
$scope.player = {}; 
$scope.player['securitytoken'] = '' ; 
$scope.player['playerfirstname'] = 'Mike'; 
$scope.player['playerlastname'] = 'Smith'; . 
Binding to the model in a form input 
<input class="cfang-input cfang-input100" 
name="playerlastname" type="text" 
ng-model="player.playerlastname“ 
value="{{player.playerlastname}}" placeholder="Last Name" 
ng-required='1==1' >
Angular Form Code Example 
• A CF page using AngularJS Form Features 
• Input validation 
• ngShow to show or hide based on form being valid 
• Binding to model
What have we seen 
• Angular App Design 
• Forms  Model Binding 
• Form Validation 
• Form CSS classes 
• AngularJS Filters 
• Using JSON 
• Authentication 
• CF Restful API 
• Error Handling 
• Services 
• Factories 
• $http 
• $resource 
• Interceptors
Working with client-side data 
• AngularJS makes it easy to work with large 
amounts of data on the client 
• Concurrency may become an issue
Real Time Channel 
• Easily hook in other JS to build real time 
– HTML5 websockets 
– Node.js 
– Express Routing framework 
– Socket.io 
• Real time Services 
– Firebase
Building in Security 
• Custom request tokens 
• AngularJS $http interceptors 
• Security tools and techniques 
– ZAP Application to test your RESTful api 
– Pete Frietag’s Using Custom Security Headers 
• Using Google Chrome Batarang 
– View data in controller scopes 
– View performance metrics
Q&A 
Mike Collins 
SupportObjective 
cfObjective 
May 2014

More Related Content

PPTX
Permainan softball
PPTX
MATERI BOLA VOLI PPT 1.pptx
PDF
Nota konsep kecergasan & kecederaan sukan
PPTX
teknik dan strategi dalam perlawanan tenis
PPTX
PPT penjaskes - softball
PPT
Bola keranjang
PPTX
Asas kimia manusia
PPTX
Power point passing
Permainan softball
MATERI BOLA VOLI PPT 1.pptx
Nota konsep kecergasan & kecederaan sukan
teknik dan strategi dalam perlawanan tenis
PPT penjaskes - softball
Bola keranjang
Asas kimia manusia
Power point passing

What's hot (20)

PPTX
Permainan bola basket
DOCX
Teknik dasar bola basket dan pengertiannya
PPTX
Kecederaan tisu lembut
PPTX
2.5 keagresifan dalam sukan
PPTX
Power point senam lantai.pptx
DOCX
Sejarah & Undang - undang dalam Futsal
PPT
Sains Sukan Tingkatan 5 Bab 3
PPTX
Istilah istilah dalam internet (tik)
PPTX
Football
PPT
Sistem kardiovaskular
PPTX
Senam Lantai
PPTX
sejarah dan permainan bola basket
PPT
3.1 kerjaya dalam sukan
DOCX
Kemahiran guling belakng (2)
PPTX
Bola voli
PPTX
Historical development of football by satyadev singh rawat (Delhi)
PPTX
10 anggaran kas
PDF
BFC U9 - Week 3 Session Plans. - Ball Mastery Play out
DOCX
Pjm 3107 gimnastik
DOC
Sofbol
Permainan bola basket
Teknik dasar bola basket dan pengertiannya
Kecederaan tisu lembut
2.5 keagresifan dalam sukan
Power point senam lantai.pptx
Sejarah & Undang - undang dalam Futsal
Sains Sukan Tingkatan 5 Bab 3
Istilah istilah dalam internet (tik)
Football
Sistem kardiovaskular
Senam Lantai
sejarah dan permainan bola basket
3.1 kerjaya dalam sukan
Kemahiran guling belakng (2)
Bola voli
Historical development of football by satyadev singh rawat (Delhi)
10 anggaran kas
BFC U9 - Week 3 Session Plans. - Ball Mastery Play out
Pjm 3107 gimnastik
Sofbol
Ad

Similar to Building ColdFusion And AngularJS Applications (20)

PPTX
Single page apps_with_cf_and_angular[1]
PDF
GDayX - Advanced Angular.JS
PPT
AngularJS Mobile Warsaw 20-10-2014
PPTX
AngularJS Fundamentals + WebAPI
PDF
Introduction to angular js july 6th 2014
PDF
ColdFusion 11 New Features
PDF
Nicolas Embleton, Advanced Angular JS
PDF
gDayX - Advanced angularjs
PDF
Workshop 12: AngularJS Parte I
PDF
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
PPTX
01 startoff angularjs
PDF
243329387 angular-docs
PDF
Language Basics | Coldfusion primer | Chap-1
PDF
Course CodeSchool - Shaping up with Angular.js
PDF
CFWheels - Pragmatic, Beautiful Code
PDF
ColdFusion 10
PPTX
The future of web development write once, run everywhere with angular.js and ...
PDF
The future of web development write once, run everywhere with angular js an...
PPTX
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
PPTX
AngularJS.part1
Single page apps_with_cf_and_angular[1]
GDayX - Advanced Angular.JS
AngularJS Mobile Warsaw 20-10-2014
AngularJS Fundamentals + WebAPI
Introduction to angular js july 6th 2014
ColdFusion 11 New Features
Nicolas Embleton, Advanced Angular JS
gDayX - Advanced angularjs
Workshop 12: AngularJS Parte I
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
01 startoff angularjs
243329387 angular-docs
Language Basics | Coldfusion primer | Chap-1
Course CodeSchool - Shaping up with Angular.js
CFWheels - Pragmatic, Beautiful Code
ColdFusion 10
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular js an...
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS.part1
Ad

More from ColdFusionConference (20)

PDF
Api manager preconference
PDF
PDF
Building better SQL Server Databases
PDF
API Economy, Realizing the Business Value of APIs
PDF
Don't just pdf, Smart PDF
PDF
Crafting ColdFusion Applications like an Architect
PDF
Security And Access Control For APIS using CF API Manager
PDF
Monetizing Business Models: ColdFusion and APIS
PDF
Become a Security Rockstar with ColdFusion 2016
PDF
ColdFusion in Transit action
PDF
Developer Insights for Application Upgrade to ColdFusion 2016
PDF
Where is cold fusion headed
PDF
ColdFusion Keynote: Building the Agile Web Since 1995
PDF
Instant ColdFusion with Vagrant
PPT
Restful services with ColdFusion
PDF
Super Fast Application development with Mura CMS
PDF
Build your own secure and real-time dashboard for mobile and web
PDF
Why Everyone else writes bad code
PDF
Securing applications
PDF
Testing automaton
Api manager preconference
Building better SQL Server Databases
API Economy, Realizing the Business Value of APIs
Don't just pdf, Smart PDF
Crafting ColdFusion Applications like an Architect
Security And Access Control For APIS using CF API Manager
Monetizing Business Models: ColdFusion and APIS
Become a Security Rockstar with ColdFusion 2016
ColdFusion in Transit action
Developer Insights for Application Upgrade to ColdFusion 2016
Where is cold fusion headed
ColdFusion Keynote: Building the Agile Web Since 1995
Instant ColdFusion with Vagrant
Restful services with ColdFusion
Super Fast Application development with Mura CMS
Build your own secure and real-time dashboard for mobile and web
Why Everyone else writes bad code
Securing applications
Testing automaton

Recently uploaded (20)

PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Introduction to Artificial Intelligence
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
medical staffing services at VALiNTRY
PPTX
Transform Your Business with a Software ERP System
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
top salesforce developer skills in 2025.pdf
PDF
Digital Systems & Binary Numbers (comprehensive )
PPT
Introduction Database Management System for Course Database
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
System and Network Administration Chapter 2
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Understanding Forklifts - TECH EHS Solution
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
assetexplorer- product-overview - presentation
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Nekopoi APK 2025 free lastest update
Navsoft: AI-Powered Business Solutions & Custom Software Development
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Reimagine Home Health with the Power of Agentic AI​
Introduction to Artificial Intelligence
Design an Analysis of Algorithms I-SECS-1021-03
medical staffing services at VALiNTRY
Transform Your Business with a Software ERP System
wealthsignaloriginal-com-DS-text-... (1).pdf
top salesforce developer skills in 2025.pdf
Digital Systems & Binary Numbers (comprehensive )
Introduction Database Management System for Course Database
How to Migrate SBCGlobal Email to Yahoo Easily
System and Network Administration Chapter 2
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Understanding Forklifts - TECH EHS Solution
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Operating system designcfffgfgggggggvggggggggg
assetexplorer- product-overview - presentation
How to Choose the Right IT Partner for Your Business in Malaysia
Nekopoi APK 2025 free lastest update

Building ColdFusion And AngularJS Applications

  • 1. Building ColdFusion and AngularJS Applications Mike Collins SupportObjective CFSummit October 2014
  • 2. Today’s Agenda Walkthrough Requirements for a CF AngularJS Application Build our ColdFusion REST Server side  Building the API  Testing the API Build AngularJS the Client side Intro to AngularJS Core AngularJS features Build and Demo AngularJS using CF REST Wrap up
  • 3. Our Project Requirements Player Registration Application – New Player Registration – Player Manager – ColdFusion 11 Server Side – AngularJS 1.3 Client Side – Use SQL DB to store data – Use REST API with JSON
  • 4. Client-side and Server-side FRONTEND BACKEND Angular Clients JSON JSON REST API to receive Use $http service to and deliver JSON call backend REST API
  • 5. Team Development Approach • The Client-side team and Server-Side team met and decided on an API • Parallel independent development • The Client side will use AngularJS ngMock to mock server-side communication until server side is ready • Server-side can test the REST API using cfhttp or jMeter to test until the client side is ready
  • 6. Building the ColdFusion REST based Server Side
  • 7. ColdFusion Server Side Features • What does CF bring to the server side • ColdFusion RESTFUL Features • Provide your applications dynamic pages • Backend Integration to JDBC, LDAP, Web Services, Email, PDF Services, JSON • Improve Security with encrypted request tokens • Seed applications with initial loading of data • Dynamically build AngularJS apps with CF
  • 8. ColdFusion RESTful Features • New feature added in CF10 • Ability to create REST services by defining certain attributes in the tags – cfcomponent – cffuntion – cfargument • RESTful Function Signatures • Supports JSON and XML serialization/deserialization • Client applications can consume REST services by issuing HTTP/HTTPS requests format • Also - other CF REST options exist such as TAFFY
  • 9. Creating a CF REST Component 1. Define CFC as REST and define a restpath attribute <cfcomponent rest="true" restpath="playerService"> 2. Define REST function 3. Define REST <cffunction name="getPlayer" access="remote“ httpmethod="GET“ restpath="getPlayer/{playerID}" returntype="any" produces="application/json"> function arguments <cfargument name="playerID“ required="true" restargsource="Path" type="numeric"/ >
  • 10. Understanding RestArgPath • CFFunction aguments can be retrieved from multiple places • Path, Query String, Form, Cookie, Header <cfargument name="playerID“ required="true" restargsource="Path" type="numeric"/ >
  • 11. REST Component Registration • Need to register your REST CFCs in CFAdmin • Using 2 new settings in Application.cfc – <cfset this.restsettings.cfclocation = “./, ./rest"> – <cfset this.restsettings.skipcfcwitherror = true>
  • 12. Processing REST Requests • /Rest is a new servlet mapping in web.xml • How REST requests are processed with Application.cfc Method Processed OnRequestStart Yes OnRequest No OnError Yes OnCFCRequest No OnRequestEnd Yes
  • 13. CF RESTful HTTP Post Example AngularJS APP <cffunction name="newPlayer" access="remote" httpmethod="POST" restpath="newPlayer" returntype="any" returnformat="json"> <cfargument name="playerData" required="true" type="string" /> <cfif not isJSON(arguments.playerData)> <cfreturn errorjson("-1000","Request Error Code 1000 - Invalid JSON #arguments.playerData#")> </cfif> <!--- Deserialize JSON ---> <cfset jsondata = deserializeJSON( arguments.playerData )> …
  • 14. ColdFusion 11 JSON Improvements • JSON improvements – Data type preservation for Query and CFC – Case preservation of struct keys – Added "Struct" as new QueryFormat • Which is the format AngularJS expects – Ability to define custom JSON serializer http://blogs.coldfusion.com/post.cfm/language-enhancements-in-coldfusion-splendor-improved-json-serialization-2
  • 15. Server-side Testing • CFHTTP scripts • jMeter Load Testing
  • 17. About AngularJS • Adapts and extends HTML • Some of the key features: – two-way data-binding – synchronizes model data and views – Filters for client side data – http ajax call features • Follows a MVC pattern – loose coupling between presentation, data, and logic components. • A complete client-side JavaScript solution • Managed by a developer team at Google Igor and Miska from Google
  • 19. AngularJS Popularity Project contributors per month
  • 20. AngularJS Reach • Browser support – Safari – Chrome – Firefox – Opera – IE8, IE9 – Mobile browsers Android, Chrome Mobile, iOS Safari • AngularJS 1.3 does not support IE 8
  • 21. Getting AngularJS Go to Angularjs.org to download http://angularjs.org
  • 22. Optional Add-on Modules • Loaded after the coreangular.js file: – angular-animate.js - Enable animation support – angular-cookies.js - A convenient wrapper for reading and writing browser cookies – angular-resource.js - Interaction support with RESTful services via the $resource service – angular-route.js - Routing and deep linking services and directives for angular apps – angular-sanitize.js - Functionality to sanitize HTML – angular-touch.js - Touch events and other helpers for touch-enabled devices – New angular-messages.js – helps with displaying informative error messages with forms
  • 23. Works well with Others
  • 24. Many Server-side Integration Points Angular Clients http resource websockets services factories restful Cloud Services
  • 25. A Simple AngularJS App <script type="text/javascript" src="/js/angular.min.js"></script> <h1>Simple Data Binding with AngularJS</h1> <div ng-app> Name: <input type="text" ng-model="name" /> Welcome to AngularJS {{name}} </div> http://cfangular.com/simple/databinding.cfm
  • 26. Getting Started Resources • Dan Wahlin – AngularJS in 60ish Minutes – https://www.youtube.com/watch?v=i9MHigUZKEM • All the ng-conf sessions – https://www.youtube.com/results?search_query=ng-conf • AngularJS FAQ – https://docs.angularjs.org/misc/faq
  • 28. Frontend / Clientside Team • They have been busy writing the front end using ngMock waiting for the Server API to be completed – ngMock as an AngularJS module to mock backend communication • Now let’s hook the frontend with the ColdFusion REST server api • Check out this blog for using ngmock with CF – http://www.sagarganatra.com/2014/06/angularjs-resolving-data-services.html
  • 29. AngularJS Startup • Loading an AngularJS page builds our scopes and bindings Backend Providers SERVER REST API Datastore
  • 30. AngularJS Features the team used 2 way Data Binding Model - Form Filters Player Finder Controllers Each route gets its own ngRoute – ngView Load dynamic CF pages Ng-repeat Directive Custom Date Directive $http service Get and Post JSON $http interceptor Catch all server traffic Form Processing Validation and messaging Built in Form CSS Classes Ng-show directive Ng-disable directive
  • 31. Our AngularJS Home <html ng-app="playerApp"> <head> <!-- Load CSS other JS here--> <!-- Load Angular and Angular Routes Module --> <script src="vendor/angular.min.js"></script> <script src="vendor/angular-route.min.js"></script> <!-- Load main AngularJS application js --> <script src="js/app.js"></script> </head> <body ng-controller="mainController"> --- </body> </html>
  • 32. Routes and Controllers and ngView <body ng-controller="mainController"> <nav class="navbar navbar-default"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="/">Player Registration Manager</a> </div> <ul class="nav navbar-nav navbar-right"> <li><a href="#"><i class="fa fa-home"></i> Home</a></li> <li><a href="#register"><i class="fa fa-shield"></i> Register Player</a></li> <li><a href="#manager"><i class="fa fa-comment"></i> Manager Players</a></li> </ul> </div> </nav> <div id="main"> <div ng-view class="parialview"></div> </div> </body>
  • 33. Using Routes and Controllers mainController playerApp.controller('mainController', function($scope) { $scope.message = 'I am the home page!'; }); Home.cfm <div class="jumbotron text-center"> <h1>Home Page</h1> <p>{{ message }}</p> </div> http://cfangular.com/playerapp/ App.js playerApp.config(function($routeProvider) { $routeProvider // route for the home page .when('/', { templateUrl : 'partials/home.cfm', controller : 'mainController' }) // route for the register page .when('/register', { templateUrl : 'partials/register.cfm', controller : 'registerController' }) // route for the player manager page .when('/manager', { templateUrl : 'partials/manager.cfm', controller : 'managerController' }); });
  • 34. AngularJS $http Features • $http Caching • $http Interceptors • $http Headers • $http Security – Built in JSON vulnerability protection – Built in XSRF protection
  • 35. Calling the ColdFusion RESTful API $scope.updatePlayer = function() { if ($scope.manageForm.$valid){ $http.post('/rest/playerService/updatePlayer?callback=JSON_CALLBACK', $scope.player). success(function(data, status) { $scope.status = data.status; $scope.message = data.message; }) .error(function(data, status) { alert(data.MESSAGE ); $scope.data = data || "Update failed"; $scope.status = status; }) } else{ alert('Please correct fields in red and then resubmit form'); } }
  • 36. Using a AngularJS Filters • We call into CF and load the playerlist array • Define the filter for a data listing <tr class="playerRow" ng-repeat="p in playerList | filter:search | orderBy:'playerfirstname' " ng-click="getPlayer(p.id)"> <td>{{p.playerfirstname | uppercase}} {{p.playerlastname}}</td> <td>{{p.playerleague}}</td> <td>{{p.currentteam}}</td> </tr> • Assign the filter to some user input Search: <input ng-model="search.$"> <select data-ng-model="search.currentteam"> <option ng-repeat="t in teams“ value="{{t.name}}">{{t.name}}</option> </select> • When user selects a team only players on that team appear
  • 37. AngularJS Form Features • Built-in CSS classes – ng-valid, ng-invalid, ng-pristine, ng-dirty • Built-in Validations – url, email, max, maxlength, min, minlength, number, pattern, required • Input Properties – $valid, $invalid, $pristine, $dirty – $error{} – contains field data for all invalid fields – ngmessages – new in 1.3 https://docs.angularjs.org/api/ngMessages • Methods – $setValidity(), $setPristine(), $setDirty(),$addControl(), $removeControl()
  • 38. ngModel and Form Bindings $scope.search = ''; $scope.player = {}; $scope.player['securitytoken'] = '' ; $scope.player['playerfirstname'] = 'Mike'; $scope.player['playerlastname'] = 'Smith'; . Binding to the model in a form input <input class="cfang-input cfang-input100" name="playerlastname" type="text" ng-model="player.playerlastname“ value="{{player.playerlastname}}" placeholder="Last Name" ng-required='1==1' >
  • 39. Angular Form Code Example • A CF page using AngularJS Form Features • Input validation • ngShow to show or hide based on form being valid • Binding to model
  • 40. What have we seen • Angular App Design • Forms Model Binding • Form Validation • Form CSS classes • AngularJS Filters • Using JSON • Authentication • CF Restful API • Error Handling • Services • Factories • $http • $resource • Interceptors
  • 41. Working with client-side data • AngularJS makes it easy to work with large amounts of data on the client • Concurrency may become an issue
  • 42. Real Time Channel • Easily hook in other JS to build real time – HTML5 websockets – Node.js – Express Routing framework – Socket.io • Real time Services – Firebase
  • 43. Building in Security • Custom request tokens • AngularJS $http interceptors • Security tools and techniques – ZAP Application to test your RESTful api – Pete Frietag’s Using Custom Security Headers • Using Google Chrome Batarang – View data in controller scopes – View performance metrics
  • 44. Q&A Mike Collins SupportObjective cfObjective May 2014