SlideShare a Scribd company logo
Part 1: ng-grid and a Simple REST API 
It is a common requirement for any project to display data in 
some kind of tabular format. The easiest way to achieve this is 
by using HTML table. But soon this gets complex as you need a 
way to support pagination (client-side and server-side), sorting 
(single & multi column), resizable columns, inline editing, 
ˉOWHULQJHWF 
Options 
• HTML Table 
• JQuery Grid Plugins (jqGrid, FlexGrid etc.) 
• Angular’s native implementation of Grid 
• ng-grid 
• ng-table 
First Grid Solution 
7KHˉUVWVROXWLRQZHDUHJRLQJWRORRNDWLVng-grid which is built for AngularJS 
and is the most popular Grid solution out there for Angular. 
www.backand.com
Where to Start 
In this Blog post we will build a grid solution using Angular and ng-grid, 
which hooks in to the RESTful end point running locally using NodeJS  
ExpressJS. We will use basic features of Node  Express. Before jumping 
in, you may want to see the working code on Plunker: http://embed.plnkr. 
co/865hnS/preview. 
Assumptions 
1. You already know AngularJS 
2. Know the basics of Grunt, Bower and Bootstrap 
3. Have basic knowledge about REST 
4. You already have node, npm, git and bower installed on your development 
machine 
Project Structure 
We will use the following Angular seed project: 
https://github.com/libertyleap/angular-grunt-seed 
This is the seed project which comes with a default bower and grunt build for 
lint, karma, watch, livereload, express server, etc. 
Steps to setup  run Seed Project: 
1. Clone the project: 
 git clone https://github.com/libertyleap/angular-grunt-seed.git 
2. Rename the project from angular-grunt-seed to ng-grid-demo 
 mv angular-grunt-seed ng-grid-demo 
3. Change the current directory to ng-grid-demo 
 cd ng-grid-demo 
4. Execute npm install so that all the Grunt dependencies are downloaded 
and it also runs bower install 
 npm install 
5. Execute grunt, this will start the local Node server on port 9000. 
 grunt 
www.backand.com
6. Open your favorite browser and go to: http://localhost:9000/ 
Adding NG-Grid into Seed Project Using Bower 
The easiest way to add ng-grid to seed project is using Bower and we will 
cover this approach in this blog. If you are not comfortable doing this, you can 
do it manually i.e. go to ng-grid repo: http://angular-ui.github.io/ng-grid/ and 
FRSRYHUWKHUHTXLUHGˉOHVZKLFKDUHFRYHUHGEHORZ 
 bower install ng-grid –save-dev 
Above command updates the ng-grid-demobower.jsonˉOHWRDGGng-grid as 
dependency. 
Bower will download ng-grid locally. You can verify this by going in to the 
“bower-components” folder. You will see a new folder ng-grid inside the 
bower-components folder. 
Hooking-up NG-Grid with View Restful Service 
To utilize ng-grid in our seed project we need to reference two ng-grid 
ˉOHV7KHˉUVWRQHLVWKH-DYDVFULSWˉOHDQGWKHVHFRQGLVWKH66IRUWKH 
WKHPLQJRIWKHJULG7KHˉUVWVWHSZLOOEHWRJRLQWRRXUindex.htmlˉOH 
DQGDGGERWKWKH-DYD6FULSWDQGWKHFVVˉOHVDVGHSHQGHQF 
www.backand.com
Open the ng-grid-demo/src/index.htmlˉOHDQGDGGWKHIROORZLQJHQWULHV 
1. In the head add this css dependency (bower-components/ng-grid/ng-grid. 
www.backand.com 
css). 
2. In the body section add ng-grid’s js dependency (bower-components/ 
ng-grid/ng-grid-2.0.12.debug.js). 
3. We need to add the ‘ngGrid’ Angular module dependency to app.js so that 
we can start using ng-grid’s directives and other services. 
NG-Grid Basic Example 
We will look at the steps required to add the basic ng-grid example in this 
section. We will explore ng-grid’s advanced features in coming sections. 
To be able to demonstrate grid features we need some kind of REST endpoint. 
)RUWKLVEORJSRVWZHZLOOXVHORFDO-621ˉOHDV5(67HQGSRLQWZKLFKZLOO 
serve list of open source contributors. 
REST  JSON: 
Create a folder json XQGHU QJJULGGHPR?VUF IROGHU UHDWH D QHZ MVRQ ˉOH 
FDOOHGFRQWULEXWRUVMVRQ7KLV-621ˉOHZLOOKDYHWKHIROORZLQJFRQWHQWZKLFK 
will be served to UI  ng-grid.
ng-grid-demosrcjsoncontributor.json 
KDQJHWKH*UXQWEXLOGWRLQFOXGHWKLVMVRQˉOHLQ .build directory. 
Angular Factory: 
Let’s create a service (gridService.js) that will return above JSON using REST’s 
GET method. This data will be returned asynchronously and we will use 
Promises ($q) for this. Here is the Service code. 
We will have one method called getContributors which will use Angular’s 
$http (https://docs.angularjs.org/api/ng/service/$http) to get the data from 
MVRQFRQWULEXWRUVMVRQˉOH,WDOVRXVHV$QJXODUȠVSURPLVHLPSOHPHQWDWLRQT 
(https://docs.angularjs.org/api/ng/service/$q). 
www.backand.com
This is what is happening here: 
• When controller calls this factory method “getContributors” it will get a 
promise object back i.e. deferred.promise. 
• When response comes back from the asynchronous $http call we will 
resolve deferred object to return list of contributors. 
• If there is an error in $http then we will reject the deferred object with 
the reason so that caller can handle it appropriately i.e. show some kind 
of message back to user. 
Controller: 
We will add “GridService” as a dependency to “HomeController” and call 
“getContributors” method from GridService. Response is set as “myData” which 
will be used to populate ng-grid data in view. 
The above step $scope.gridOptions is the main setup which hooks-up ng-grid 
FRQˉJXUDWLRQWRQJJULGȠVYLHZ 
View: 
6HWWLQJXSWKHJULGLQRXU+70/ˉOHLVUHDOOHDVDQGMXVWUHTXLUHVFUHDWLQJD 
div, and adding a ng-grid directive to it with the parameter being the function 
in the controller that we will create soon. We are also going to add a simple 
class onto the div for easy styling. Change “templateshome.html” to include 
the following code: 
Here “gridOptions” is $scope object populated in controller. 
This should get the basic ng-grid up and running. 
www.backand.com
NG-Grid Features 
,QWKLVVHFWLRQZHZLOOH[SORUHGLIIHUHQWFRQˉJXUDWLRQRSWLRQVIRUQJJULG:H 
just need to change $scope.gridOptions in Controller to be able to support 
the following features. 
ROXPQ'HˉQLWLRQ 
It is a common requirement for any Grid to name column names different 
IURPWKH-621QDPH2QHH[DPSOHDERYHLVZHZDQWWRQDPHȢˉUVWQDPHȣWR 
“First Name”. 
Cell Template Example: 
%HORZLVDQH[DPSOHRQKRZWRGHˉQHFHOOWHPSODWHVXVLQJVWULQJVLQQJJULG 
From the above example we want to apply Green color to id column with id 
 1. 
In-line Cell Editing Example: 
We will explore an option to be able to edit the Grid cell and save it to the 
REST service. We will demonstrate code to be able to update the “company” 
cell of the contributor in Grid. 
www.backand.com
homeController.js 
We need to set enableCellEditSURSHUWWR758(IRUWKHFROXPQGHˉQLWLRQ 
After setting this if you restart the node server you will see company column 
is editable after double clicking the cell. 
The next step is we want to send this updated cell info to REST backend. For 
this we will use one of ng-grid’s Event (ngGridEventEndCellEdit), which will 
broadcast after cell is edited. You can see all the available ng-grid’s Events 
here: https://github.com/angular-ui/ng-grid/wiki/Grid-Events 
We will update the controller to have the following code 
As you can see from the above code we want to send the updated row 
LQIRUPDWLRQ EDFN WR 5(67 VHUYLFH :H QHHG WR GHˉQH D QHZ PHWKRG 
saveContributor in our gridService.js. 
www.backand.com 
gridService.js
We do not have a real REST service and it is impossible to demo this as we 
need some kind of persistent store. You can open your browser’s developer 
tools and validate above $http post method is called with the right data. 
You can see completed code for this blog here: https://github.com/backand/ 
ng-grid-rest-simple-demo. And stay tuned for Part 2 of this series when we 
cover ng-grid and a real REST API. 
References 
Blog Code: https://github.com/backand/ng-grid-rest-simple-demo 
Plunker: http://embed.plnkr.co/865hnS/preview 
ng-grid documentation: http://angular-ui.github.io/ng-grid/ 
ng-grid code: https://github.com/angular-ui/ng-grid 
www.backand.com 
Contact Information 
Backand Inc. 
info@backand.com 
www.backand.com

More Related Content

What's hot

The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.7 book - Part 75 of 196The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.7 book - Part 75 of 196
Mahmoud Samir Fayed
 
Docker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Docker and Your Path to a Better Staging Environment - webinar by Gil TayarDocker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Docker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Applitools
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
Schalk Cronjé
 
Sapphire Gimlets
Sapphire GimletsSapphire Gimlets
Sapphire Gimlets
Robert Cooper
 
Taking Your GWT App to Tablets with GXT 4.0
Taking Your GWT App to Tablets with GXT 4.0Taking Your GWT App to Tablets with GXT 4.0
Taking Your GWT App to Tablets with GXT 4.0
David Chandler
 
The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.8 book - Part 77 of 202The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.8 book - Part 77 of 202
Mahmoud Samir Fayed
 
AngularJS with RequireJS
AngularJS with RequireJSAngularJS with RequireJS
AngularJS with RequireJS
Johannes Weber
 
How to improve gradle build speed
How to improve gradle build speedHow to improve gradle build speed
How to improve gradle build speed
Fate Chang
 
Angular
AngularAngular
Angular
sridhiya
 
Guice gin
Guice ginGuice gin
Guice gin
Robert Cooper
 
Gradle - time for another build
Gradle - time for another buildGradle - time for another build
Gradle - time for another build
Igor Khotin
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
KAI CHU CHUNG
 
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API AuthorizationGDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
KAI CHU CHUNG
 
Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発
Recruit Lifestyle Co., Ltd.
 
Async JavaScript in ES7
Async JavaScript in ES7Async JavaScript in ES7
Async JavaScript in ES7
Mike North
 
Hands on the Gradle
Hands on the GradleHands on the Gradle
Hands on the Gradle
Matthias Käppler
 
Improving the Accumulo User Experience
 Improving the Accumulo User Experience Improving the Accumulo User Experience
Improving the Accumulo User Experience
Accumulo Summit
 
Intro
IntroIntro
Intro
bspremo
 
Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016
Alvaro Sanchez-Mariscal
 
JCConf 2016 - Google Dataflow 小試
JCConf 2016 - Google Dataflow 小試JCConf 2016 - Google Dataflow 小試
JCConf 2016 - Google Dataflow 小試
Simon Su
 

What's hot (20)

The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.7 book - Part 75 of 196The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.7 book - Part 75 of 196
 
Docker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Docker and Your Path to a Better Staging Environment - webinar by Gil TayarDocker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Docker and Your Path to a Better Staging Environment - webinar by Gil Tayar
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
Sapphire Gimlets
Sapphire GimletsSapphire Gimlets
Sapphire Gimlets
 
Taking Your GWT App to Tablets with GXT 4.0
Taking Your GWT App to Tablets with GXT 4.0Taking Your GWT App to Tablets with GXT 4.0
Taking Your GWT App to Tablets with GXT 4.0
 
The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.8 book - Part 77 of 202The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.8 book - Part 77 of 202
 
AngularJS with RequireJS
AngularJS with RequireJSAngularJS with RequireJS
AngularJS with RequireJS
 
How to improve gradle build speed
How to improve gradle build speedHow to improve gradle build speed
How to improve gradle build speed
 
Angular
AngularAngular
Angular
 
Guice gin
Guice ginGuice gin
Guice gin
 
Gradle - time for another build
Gradle - time for another buildGradle - time for another build
Gradle - time for another build
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
 
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API AuthorizationGDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
 
Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発
 
Async JavaScript in ES7
Async JavaScript in ES7Async JavaScript in ES7
Async JavaScript in ES7
 
Hands on the Gradle
Hands on the GradleHands on the Gradle
Hands on the Gradle
 
Improving the Accumulo User Experience
 Improving the Accumulo User Experience Improving the Accumulo User Experience
Improving the Accumulo User Experience
 
Intro
IntroIntro
Intro
 
Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016
 
JCConf 2016 - Google Dataflow 小試
JCConf 2016 - Google Dataflow 小試JCConf 2016 - Google Dataflow 小試
JCConf 2016 - Google Dataflow 小試
 

Viewers also liked

C2.302
C2.302C2.302
C2.302
beto montero
 
Teste
TesteTeste
Bibliografia
BibliografiaBibliografia
Bibliografia
beto montero
 
Boletin advisory-12-2007
Boletin advisory-12-2007Boletin advisory-12-2007
Boletin advisory-12-2007
beto montero
 
Bvcm001808
Bvcm001808Bvcm001808
Bvcm001808
beto montero
 
18
1818
021
021021
001
001001
001
rasark
 
A09v7n2
A09v7n2A09v7n2
A09v7n2
beto montero
 
Po sukces w logistyce!
Po sukces w logistyce!Po sukces w logistyce!
Po sukces w logistyce!
Ewika
 
البرنامج الانتخابى - نسخة للمناقشة المجتمعية
البرنامج الانتخابى - نسخة للمناقشة المجتمعيةالبرنامج الانتخابى - نسخة للمناقشة المجتمعية
البرنامج الانتخابى - نسخة للمناقشة المجتمعية
Abdelrahman Hussien
 
Stock Market Weekly Graphs
Stock Market Weekly GraphsStock Market Weekly Graphs
Stock Market Weekly Graphs
chinnu98
 
Articulo rfid fundamentos
Articulo rfid fundamentosArticulo rfid fundamentos
Articulo rfid fundamentos
beto montero
 
Database kesehatan rumah tangga ber phbs
Database kesehatan  rumah tangga ber phbsDatabase kesehatan  rumah tangga ber phbs
Database kesehatan rumah tangga ber phbs
Dheki 'jrs'
 
Data kesehatan kementrian kesehatan tahun 2012 dari 5
Data kesehatan kementrian kesehatan tahun 2012 dari 5Data kesehatan kementrian kesehatan tahun 2012 dari 5
Data kesehatan kementrian kesehatan tahun 2012 dari 5
Dheki 'jrs'
 
12 Days of Christmas Slideshow
12 Days of Christmas Slideshow12 Days of Christmas Slideshow
12 Days of Christmas Slideshow
chinnu98
 
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLEREST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
reneechemel
 

Viewers also liked (18)

C2.302
C2.302C2.302
C2.302
 
Teste
TesteTeste
Teste
 
Bibliografia
BibliografiaBibliografia
Bibliografia
 
Boletin advisory-12-2007
Boletin advisory-12-2007Boletin advisory-12-2007
Boletin advisory-12-2007
 
Bvcm001808
Bvcm001808Bvcm001808
Bvcm001808
 
18
1818
18
 
021
021021
021
 
001
001001
001
 
A09v7n2
A09v7n2A09v7n2
A09v7n2
 
Po sukces w logistyce!
Po sukces w logistyce!Po sukces w logistyce!
Po sukces w logistyce!
 
البرنامج الانتخابى - نسخة للمناقشة المجتمعية
البرنامج الانتخابى - نسخة للمناقشة المجتمعيةالبرنامج الانتخابى - نسخة للمناقشة المجتمعية
البرنامج الانتخابى - نسخة للمناقشة المجتمعية
 
Prezentacja1
Prezentacja1Prezentacja1
Prezentacja1
 
Stock Market Weekly Graphs
Stock Market Weekly GraphsStock Market Weekly Graphs
Stock Market Weekly Graphs
 
Articulo rfid fundamentos
Articulo rfid fundamentosArticulo rfid fundamentos
Articulo rfid fundamentos
 
Database kesehatan rumah tangga ber phbs
Database kesehatan  rumah tangga ber phbsDatabase kesehatan  rumah tangga ber phbs
Database kesehatan rumah tangga ber phbs
 
Data kesehatan kementrian kesehatan tahun 2012 dari 5
Data kesehatan kementrian kesehatan tahun 2012 dari 5Data kesehatan kementrian kesehatan tahun 2012 dari 5
Data kesehatan kementrian kesehatan tahun 2012 dari 5
 
12 Days of Christmas Slideshow
12 Days of Christmas Slideshow12 Days of Christmas Slideshow
12 Days of Christmas Slideshow
 
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLEREST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
 

Similar to Part 1: ng-grid and a Simple REST API

AngularJS Fundamentals + WebAPI
AngularJS Fundamentals + WebAPIAngularJS Fundamentals + WebAPI
AngularJS Fundamentals + WebAPI
Eric Wise
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overview
marpierc
 
Adding User Management to Node.js
Adding User Management to Node.jsAdding User Management to Node.js
Adding User Management to Node.js
Dev_Events
 
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdfDevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
KAI CHU CHUNG
 
Grails & Angular: unleashing the dynamic duo
Grails & Angular: unleashing the dynamic duoGrails & Angular: unleashing the dynamic duo
Grails & Angular: unleashing the dynamic duo
Rubén Mondéjar Andreu
 
Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6
William Marques
 
Angular Js Basics
Angular Js BasicsAngular Js Basics
Angular Js Basics
أحمد عبد الوهاب
 
An approach to responsive, realtime with Backbone.js and WebSockets
An approach to responsive, realtime with Backbone.js and WebSocketsAn approach to responsive, realtime with Backbone.js and WebSockets
An approach to responsive, realtime with Backbone.js and WebSockets
Andrei Sebastian Cîmpean
 
AngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get startedAngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get started
Stéphane Bégaudeau
 
Angular js
Angular jsAngular js
Angular js
Behind D Walls
 
GCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdf
GCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdfGCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdf
GCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdf
ssuserc36624
 
Angular js 1.3 presentation for fed nov 2014
Angular js 1.3 presentation for fed   nov 2014Angular js 1.3 presentation for fed   nov 2014
Angular js 1.3 presentation for fed nov 2014
Sarah Hudson
 
Presentation on angular 5
Presentation on angular 5Presentation on angular 5
Presentation on angular 5
Ramesh Adhikari
 
Angular js
Angular jsAngular js
Angular js
Thyda Eng
 
GraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits togetherGraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits together
Sashko Stubailo
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
Knoldus Inc.
 
The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 81 of 210The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 81 of 210
Mahmoud Samir Fayed
 
202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP
Ronald Hsu
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
Antônio Roberto Silva
 
Grails Advanced
Grails Advanced Grails Advanced
Grails Advanced
Saurabh Dixit
 

Similar to Part 1: ng-grid and a Simple REST API (20)

AngularJS Fundamentals + WebAPI
AngularJS Fundamentals + WebAPIAngularJS Fundamentals + WebAPI
AngularJS Fundamentals + WebAPI
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overview
 
Adding User Management to Node.js
Adding User Management to Node.jsAdding User Management to Node.js
Adding User Management to Node.js
 
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdfDevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
 
Grails & Angular: unleashing the dynamic duo
Grails & Angular: unleashing the dynamic duoGrails & Angular: unleashing the dynamic duo
Grails & Angular: unleashing the dynamic duo
 
Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6
 
Angular Js Basics
Angular Js BasicsAngular Js Basics
Angular Js Basics
 
An approach to responsive, realtime with Backbone.js and WebSockets
An approach to responsive, realtime with Backbone.js and WebSocketsAn approach to responsive, realtime with Backbone.js and WebSockets
An approach to responsive, realtime with Backbone.js and WebSockets
 
AngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get startedAngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get started
 
Angular js
Angular jsAngular js
Angular js
 
GCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdf
GCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdfGCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdf
GCP-Professional-Cloud-Developer-Exam-v22.2.1_139-taqwlj.pdf
 
Angular js 1.3 presentation for fed nov 2014
Angular js 1.3 presentation for fed   nov 2014Angular js 1.3 presentation for fed   nov 2014
Angular js 1.3 presentation for fed nov 2014
 
Presentation on angular 5
Presentation on angular 5Presentation on angular 5
Presentation on angular 5
 
Angular js
Angular jsAngular js
Angular js
 
GraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits togetherGraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits together
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
 
The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 81 of 210The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 81 of 210
 
202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
 
Grails Advanced
Grails Advanced Grails Advanced
Grails Advanced
 

Recently uploaded

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Zilliz
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 

Recently uploaded (20)

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 

Part 1: ng-grid and a Simple REST API

  • 1. Part 1: ng-grid and a Simple REST API It is a common requirement for any project to display data in some kind of tabular format. The easiest way to achieve this is by using HTML table. But soon this gets complex as you need a way to support pagination (client-side and server-side), sorting (single & multi column), resizable columns, inline editing, ˉOWHULQJHWF Options • HTML Table • JQuery Grid Plugins (jqGrid, FlexGrid etc.) • Angular’s native implementation of Grid • ng-grid • ng-table First Grid Solution 7KHˉUVWVROXWLRQZHDUHJRLQJWRORRNDWLVng-grid which is built for AngularJS and is the most popular Grid solution out there for Angular. www.backand.com
  • 2. Where to Start In this Blog post we will build a grid solution using Angular and ng-grid, which hooks in to the RESTful end point running locally using NodeJS ExpressJS. We will use basic features of Node Express. Before jumping in, you may want to see the working code on Plunker: http://embed.plnkr. co/865hnS/preview. Assumptions 1. You already know AngularJS 2. Know the basics of Grunt, Bower and Bootstrap 3. Have basic knowledge about REST 4. You already have node, npm, git and bower installed on your development machine Project Structure We will use the following Angular seed project: https://github.com/libertyleap/angular-grunt-seed This is the seed project which comes with a default bower and grunt build for lint, karma, watch, livereload, express server, etc. Steps to setup run Seed Project: 1. Clone the project: git clone https://github.com/libertyleap/angular-grunt-seed.git 2. Rename the project from angular-grunt-seed to ng-grid-demo mv angular-grunt-seed ng-grid-demo 3. Change the current directory to ng-grid-demo cd ng-grid-demo 4. Execute npm install so that all the Grunt dependencies are downloaded and it also runs bower install npm install 5. Execute grunt, this will start the local Node server on port 9000. grunt www.backand.com
  • 3. 6. Open your favorite browser and go to: http://localhost:9000/ Adding NG-Grid into Seed Project Using Bower The easiest way to add ng-grid to seed project is using Bower and we will cover this approach in this blog. If you are not comfortable doing this, you can do it manually i.e. go to ng-grid repo: http://angular-ui.github.io/ng-grid/ and FRSRYHUWKHUHTXLUHGˉOHVZKLFKDUHFRYHUHGEHORZ bower install ng-grid –save-dev Above command updates the ng-grid-demobower.jsonˉOHWRDGGng-grid as dependency. Bower will download ng-grid locally. You can verify this by going in to the “bower-components” folder. You will see a new folder ng-grid inside the bower-components folder. Hooking-up NG-Grid with View Restful Service To utilize ng-grid in our seed project we need to reference two ng-grid ˉOHV7KHˉUVWRQHLVWKH-DYDVFULSWˉOHDQGWKHVHFRQGLVWKH66IRUWKH WKHPLQJRIWKHJULG7KHˉUVWVWHSZLOOEHWRJRLQWRRXUindex.htmlˉOH DQGDGGERWKWKH-DYD6FULSWDQGWKHFVVˉOHVDVGHSHQGHQF www.backand.com
  • 4. Open the ng-grid-demo/src/index.htmlˉOHDQGDGGWKHIROORZLQJHQWULHV 1. In the head add this css dependency (bower-components/ng-grid/ng-grid. www.backand.com css). 2. In the body section add ng-grid’s js dependency (bower-components/ ng-grid/ng-grid-2.0.12.debug.js). 3. We need to add the ‘ngGrid’ Angular module dependency to app.js so that we can start using ng-grid’s directives and other services. NG-Grid Basic Example We will look at the steps required to add the basic ng-grid example in this section. We will explore ng-grid’s advanced features in coming sections. To be able to demonstrate grid features we need some kind of REST endpoint. )RUWKLVEORJSRVWZHZLOOXVHORFDO-621ˉOHDV5(67HQGSRLQWZKLFKZLOO serve list of open source contributors. REST JSON: Create a folder json XQGHU QJJULGGHPR?VUF IROGHU UHDWH D QHZ MVRQ ˉOH FDOOHGFRQWULEXWRUVMVRQ7KLV-621ˉOHZLOOKDYHWKHIROORZLQJFRQWHQWZKLFK will be served to UI ng-grid.
  • 5. ng-grid-demosrcjsoncontributor.json KDQJHWKH*UXQWEXLOGWRLQFOXGHWKLVMVRQˉOHLQ .build directory. Angular Factory: Let’s create a service (gridService.js) that will return above JSON using REST’s GET method. This data will be returned asynchronously and we will use Promises ($q) for this. Here is the Service code. We will have one method called getContributors which will use Angular’s $http (https://docs.angularjs.org/api/ng/service/$http) to get the data from MVRQFRQWULEXWRUVMVRQˉOH,WDOVRXVHV$QJXODUȠVSURPLVHLPSOHPHQWDWLRQT (https://docs.angularjs.org/api/ng/service/$q). www.backand.com
  • 6. This is what is happening here: • When controller calls this factory method “getContributors” it will get a promise object back i.e. deferred.promise. • When response comes back from the asynchronous $http call we will resolve deferred object to return list of contributors. • If there is an error in $http then we will reject the deferred object with the reason so that caller can handle it appropriately i.e. show some kind of message back to user. Controller: We will add “GridService” as a dependency to “HomeController” and call “getContributors” method from GridService. Response is set as “myData” which will be used to populate ng-grid data in view. The above step $scope.gridOptions is the main setup which hooks-up ng-grid FRQˉJXUDWLRQWRQJJULGȠVYLHZ View: 6HWWLQJXSWKHJULGLQRXU+70/ˉOHLVUHDOOHDVDQGMXVWUHTXLUHVFUHDWLQJD div, and adding a ng-grid directive to it with the parameter being the function in the controller that we will create soon. We are also going to add a simple class onto the div for easy styling. Change “templateshome.html” to include the following code: Here “gridOptions” is $scope object populated in controller. This should get the basic ng-grid up and running. www.backand.com
  • 7. NG-Grid Features ,QWKLVVHFWLRQZHZLOOH[SORUHGLIIHUHQWFRQˉJXUDWLRQRSWLRQVIRUQJJULG:H just need to change $scope.gridOptions in Controller to be able to support the following features. ROXPQ'HˉQLWLRQ It is a common requirement for any Grid to name column names different IURPWKH-621QDPH2QHH[DPSOHDERYHLVZHZDQWWRQDPHȢˉUVWQDPHȣWR “First Name”. Cell Template Example: %HORZLVDQH[DPSOHRQKRZWRGHˉQHFHOOWHPSODWHVXVLQJVWULQJVLQQJJULG From the above example we want to apply Green color to id column with id 1. In-line Cell Editing Example: We will explore an option to be able to edit the Grid cell and save it to the REST service. We will demonstrate code to be able to update the “company” cell of the contributor in Grid. www.backand.com
  • 8. homeController.js We need to set enableCellEditSURSHUWWR758(IRUWKHFROXPQGHˉQLWLRQ After setting this if you restart the node server you will see company column is editable after double clicking the cell. The next step is we want to send this updated cell info to REST backend. For this we will use one of ng-grid’s Event (ngGridEventEndCellEdit), which will broadcast after cell is edited. You can see all the available ng-grid’s Events here: https://github.com/angular-ui/ng-grid/wiki/Grid-Events We will update the controller to have the following code As you can see from the above code we want to send the updated row LQIRUPDWLRQ EDFN WR 5(67 VHUYLFH :H QHHG WR GHˉQH D QHZ PHWKRG saveContributor in our gridService.js. www.backand.com gridService.js
  • 9. We do not have a real REST service and it is impossible to demo this as we need some kind of persistent store. You can open your browser’s developer tools and validate above $http post method is called with the right data. You can see completed code for this blog here: https://github.com/backand/ ng-grid-rest-simple-demo. And stay tuned for Part 2 of this series when we cover ng-grid and a real REST API. References Blog Code: https://github.com/backand/ng-grid-rest-simple-demo Plunker: http://embed.plnkr.co/865hnS/preview ng-grid documentation: http://angular-ui.github.io/ng-grid/ ng-grid code: https://github.com/angular-ui/ng-grid www.backand.com Contact Information Backand Inc. info@backand.com www.backand.com