SlideShare uma empresa Scribd logo
1 de 24
AngularJS is a Javascript MVC framework created by 
Google to build properly architectured and maintainable 
web applications. 
Focus more on HTML side of web apps.
● Angular JS 
o Setup in Rails 
● Basics (directives, controllers) 
● Our Experience in Building .. 
o Dash for Metrics/Monitoring 
o Stream Realtime Logs
Option #1: Via Gem file 
Add the following to your Gemfile: 
gem 'angularjs-rails' 
Add the following directive to your JavaScript manifest 
file (application.js): 
//= require angular
If you desire to require (*optional) Angular files, you 
may include them as well in your JavaScript manifest 
file (application.js). For example: 
//= require angular-animate 
//= require angular-resource
Option#2: Explicitly download angular.js 
Download here 
Put angular.js file in your “/vendor/assets/javascripts/” 
path. 
eg:https://github.com/megamsys/nilavu/tree/master/ve 
ndor/assets/javascripts
is NOT a JavaScript library (As they say). There are no 
functions which we can be directly called and used. 
is NOT a DOM manipulation library like jQuery. But it uses 
subset of jQuery for DOM manipulation (called jqLite).
Model - application data 
View - what the user sees 
Controller - application behavior
Scope - glue between application data and 
behavior 
$ - angular namespace 
Module - configures the injector 
Injector - assembles the application
Angularjs 
Directives Templates 
Controller 
Router (app.js) 
Rails 
Controller 
Model 
View 
Action to route 
Widgets 
/widgets
1. When an action is performed in rails dashboard view 
page that action will be handled by the Angularjs router. 
2./dashboards angularjs controllers is called which calls 
the rails controller for widgets.
3. When rails controller receives the request from 
angularjs controller(/dashboard) via a rest call, it loads 
all the widget names stored in a rails model. 
4. The templates for each of the widgets in angularjs are 
rendered by angularjs dashboard controller and a final 
rails view page is shown to the user.
Create app.js in your assets folder. 
angular.module('Megam', [ "ngResource", "ngRoute",ngAnimate" ]); 
Declare “Megam” - an angular module. 
We bootstrap the “Megam” module in our WebApp in 
index.html.erb using <html ng-app="Megam">
Create dashboard view page : 
An user clicks an action “/dashboards/:id” path from a Rails:Dashboards 
Controller. 
<%= link_to dashboard_path(one_app_service.id), :class=>"btn 
btn-primary btn-lg active", :id =>id="popover_dashboard_monitor", 
:target => "_blank" do %> Monitor <% end %>
Route for /dashboards/:id 
app.config([ "$routeProvider", "$locationProvider", 
function($routeProvider, $locationProvider) { 
$locationProvider.html5Mode(true); 
$routeProvider.when("/dashboards/:id", { 
templateUrl : 
'angular/templates/dashboards/show.html.erb', 
controller : "DashboardShowCtrl" 
}); 
} ]); 
● The above sets a route for /dashboards to “DashboardShowCtrl” controller
Setup angularjs dashboard controller: 
app.controller("DashboardShowCtrl", ["$scope", "$routeParams", "Dashboard", "Widget", 
function($scope, $routeParams, Dashboard, Widget) { 
$scope.dashboard = Dashboard.get({ id: $routeParams.id }); 
$scope.widgets = Widget.query({ dashboard_id: $routeParams.id }, function() { 
$rootScope.resolved = true; 
}); 
} 
● The Dashboard.get loads the current dashboard from Rails 
● Using the dashboard_id from above, the Widget.query method sends a rest api call to Rails 
controller for get all widgets for the dashboard_id 
● The parameters “Dashboard” and “Widget” are Angularjs services.
Setup Rails Dashboards controller: 
module Api 
class DashboardsController 
respond_to :json 
def index 
@user_id = current_user.id 
dashboards = current_user.apps 
respond_with dashboards 
end 
end 
end 
● The rails dashboards controller loads all stored widgets from the model and sends a response 
to angularjs dashboard controller.
Setup dashboard service: 
app.factory("Dashboard", ["$resource", function($resource) { 
return $resource("/api/dashboards/:id.json", { id: "@id" }, 
{ 
'show': { method: 'GET', isArray: false } 
}); 
}]); 
● This call the /api/dashboards/ url of the rails controller where the dashboard model (state), 
eg: how will my dashboard view look like ? is loaded.
Setup widget service: 
app.factory("Widget", ["$resource", function($resource) { 
return $resource("/api/dashboards/:dashboard_id/widgets/:id.json", { id: "@id", dashboard_id: 
"@dashboard_id" }, 
{ 
'index': { method: 'GET', isArray: true }, 
'show': { method: 'GET', isArray: false }, 
} 
); 
}]); 
● This calls the /api/dashboards/:dashboard_id/widgets/id url of the rails controller where the 
widgets in the dashboard model (state), eg: how will my widgets in dashboard view look like ? 
is loaded.
Setup dashboard template: 
<div id="content-header" class="mini"> 
<ul class="mini-stats box-3"> 
<li class="widget" ng-repeat="widget in widgets" widgetpernode></li> 
</ul> 
</div> 
● DashController in Rails will render the above template. 
● All the widgets will be shown in this template. The “widgetpernode” is an angularjs directive of 
widget. 
● The “ng-repeat="widget in widgets”” is equivalent to for loop, widgets contains list of 
widgets.
Setup widget controller: 
app.controller("WidgetCtrl", ["$scope", function($scope) { 
//graph : draws a running graph 
}]); 
The widget controller set actions for single widget, For eg: to draw a graph in widget to be put the 
following code 
var plot1 = 
$.plot("#cpu_system_graph",FlotrGraphHelper.transformSeriesOfDatapoints(cpu_system_data, 
scope.widget, currentColors), FlotrGraphHelper.defaultOptions(scope.widget, "cpu_system")); 
plot1.setData(FlotrGraphHelper.transformSeriesOfDatapoints(cpu_system_data, scope.widget, 
currentColors)); 
plot1.draw();
Setup widget template: 
<div class="row"> 
<div class="col-xs-11 col-sm-11 col-md-11"> 
<h1><small>CPU Usage </small></h1> 
<div id="cpu_system_graph"></div> 
</div> 
</div> 
● The widget controller rendered this widget template and draw the graph into the 
“cpu_system_graph” location.
Setup dashboard directive: 
app.directive("widgetpernode", ["$compile", function($compile) { 
var linkFn = function(scope, element, attrs) { 
var elm = element.find(".widget_content"); 
elm.append('<div '+ scope.widget.name + ' />'); 
$compile(elm)(scope); 
}; 
return { 
controller: "WidgetCtrl", 
templateUrl: 'angular/templates/widget/show.html.erb', 
link: linkFn 
}; 
}]); 
● widgetpernode directive, renders using angularjs WidgetCtrl and templateUrl : 
angular/templates/widgets/show.html.erb.
http://www.gomegam.com 
https://www.megam.co 
code : https://github.com/megamsys/nilavu.git 
email : rajthilak@megam.co.in 
twitter:@megamsystems

Mais conteúdo relacionado

Mais procurados

VIPER Architecture
VIPER ArchitectureVIPER Architecture
VIPER ArchitectureAhmed Lotfy
 
P3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésP3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésLilia Sfaxi
 
Free sample assignment on customs regulatory compliance management
Free sample assignment on customs   regulatory compliance managementFree sample assignment on customs   regulatory compliance management
Free sample assignment on customs regulatory compliance managementwww.StudentsAssignmentHelp.com
 

Mais procurados (6)

Decorator Pattern
Decorator PatternDecorator Pattern
Decorator Pattern
 
React hooks
React hooksReact hooks
React hooks
 
Angular js
Angular jsAngular js
Angular js
 
VIPER Architecture
VIPER ArchitectureVIPER Architecture
VIPER Architecture
 
P3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésP3 listes et elements graphiques avancés
P3 listes et elements graphiques avancés
 
Free sample assignment on customs regulatory compliance management
Free sample assignment on customs   regulatory compliance managementFree sample assignment on customs   regulatory compliance management
Free sample assignment on customs regulatory compliance management
 

Semelhante a Building a dashboard using AngularJS

Introduction of angular js
Introduction of angular jsIntroduction of angular js
Introduction of angular jsTamer Solieman
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverSpike Brehm
 
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJSAngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJSmurtazahaveliwala
 
A Story about AngularJS modularization development
A Story about AngularJS modularization developmentA Story about AngularJS modularization development
A Story about AngularJS modularization developmentJohannes Weber
 
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 startedStéphane Bégaudeau
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Eliran Eliassy
 
AgularJS basics- angular directives and controllers
AgularJS basics- angular directives and controllersAgularJS basics- angular directives and controllers
AgularJS basics- angular directives and controllersjobinThomas54
 
One Weekend With AngularJS
One Weekend With AngularJSOne Weekend With AngularJS
One Weekend With AngularJSYashobanta Bai
 
Adding User Management to Node.js
Adding User Management to Node.jsAdding User Management to Node.js
Adding User Management to Node.jsDev_Events
 
Top 10 Mistakes AngularJS Developers Make
Top 10 Mistakes AngularJS Developers MakeTop 10 Mistakes AngularJS Developers Make
Top 10 Mistakes AngularJS Developers MakeMark Meyer
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersOswald Campesato
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS BasicsRavi Mone
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseEPAM Systems
 
Controller in AngularJS
Controller in AngularJSController in AngularJS
Controller in AngularJSBrajesh Yadav
 

Semelhante a Building a dashboard using AngularJS (20)

Introduction of angular js
Introduction of angular jsIntroduction of angular js
Introduction of angular js
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
 
Angular js
Angular jsAngular js
Angular js
 
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJSAngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
 
A Story about AngularJS modularization development
A Story about AngularJS modularization developmentA Story about AngularJS modularization development
A Story about AngularJS modularization development
 
Custom directive and scopes
Custom directive and scopesCustom directive and scopes
Custom directive and scopes
 
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 server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 
Starting with angular js
Starting with angular js Starting with angular js
Starting with angular js
 
AgularJS basics- angular directives and controllers
AgularJS basics- angular directives and controllersAgularJS basics- angular directives and controllers
AgularJS basics- angular directives and controllers
 
One Weekend With AngularJS
One Weekend With AngularJSOne Weekend With AngularJS
One Weekend With AngularJS
 
Adding User Management to Node.js
Adding User Management to Node.jsAdding User Management to Node.js
Adding User Management to Node.js
 
Top 10 Mistakes AngularJS Developers Make
Top 10 Mistakes AngularJS Developers MakeTop 10 Mistakes AngularJS Developers Make
Top 10 Mistakes AngularJS Developers Make
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for Beginners
 
Vue js and Dyploma
Vue js and DyplomaVue js and Dyploma
Vue js and Dyploma
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS Basics
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete Course
 
Controller in AngularJS
Controller in AngularJSController in AngularJS
Controller in AngularJS
 
AngularJS
AngularJSAngularJS
AngularJS
 
Angular Js Basics
Angular Js BasicsAngular Js Basics
Angular Js Basics
 

Último

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 

Último (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

Building a dashboard using AngularJS

  • 1.
  • 2. AngularJS is a Javascript MVC framework created by Google to build properly architectured and maintainable web applications. Focus more on HTML side of web apps.
  • 3. ● Angular JS o Setup in Rails ● Basics (directives, controllers) ● Our Experience in Building .. o Dash for Metrics/Monitoring o Stream Realtime Logs
  • 4. Option #1: Via Gem file Add the following to your Gemfile: gem 'angularjs-rails' Add the following directive to your JavaScript manifest file (application.js): //= require angular
  • 5. If you desire to require (*optional) Angular files, you may include them as well in your JavaScript manifest file (application.js). For example: //= require angular-animate //= require angular-resource
  • 6. Option#2: Explicitly download angular.js Download here Put angular.js file in your “/vendor/assets/javascripts/” path. eg:https://github.com/megamsys/nilavu/tree/master/ve ndor/assets/javascripts
  • 7. is NOT a JavaScript library (As they say). There are no functions which we can be directly called and used. is NOT a DOM manipulation library like jQuery. But it uses subset of jQuery for DOM manipulation (called jqLite).
  • 8. Model - application data View - what the user sees Controller - application behavior
  • 9. Scope - glue between application data and behavior $ - angular namespace Module - configures the injector Injector - assembles the application
  • 10. Angularjs Directives Templates Controller Router (app.js) Rails Controller Model View Action to route Widgets /widgets
  • 11. 1. When an action is performed in rails dashboard view page that action will be handled by the Angularjs router. 2./dashboards angularjs controllers is called which calls the rails controller for widgets.
  • 12. 3. When rails controller receives the request from angularjs controller(/dashboard) via a rest call, it loads all the widget names stored in a rails model. 4. The templates for each of the widgets in angularjs are rendered by angularjs dashboard controller and a final rails view page is shown to the user.
  • 13. Create app.js in your assets folder. angular.module('Megam', [ "ngResource", "ngRoute",ngAnimate" ]); Declare “Megam” - an angular module. We bootstrap the “Megam” module in our WebApp in index.html.erb using <html ng-app="Megam">
  • 14. Create dashboard view page : An user clicks an action “/dashboards/:id” path from a Rails:Dashboards Controller. <%= link_to dashboard_path(one_app_service.id), :class=>"btn btn-primary btn-lg active", :id =>id="popover_dashboard_monitor", :target => "_blank" do %> Monitor <% end %>
  • 15. Route for /dashboards/:id app.config([ "$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) { $locationProvider.html5Mode(true); $routeProvider.when("/dashboards/:id", { templateUrl : 'angular/templates/dashboards/show.html.erb', controller : "DashboardShowCtrl" }); } ]); ● The above sets a route for /dashboards to “DashboardShowCtrl” controller
  • 16. Setup angularjs dashboard controller: app.controller("DashboardShowCtrl", ["$scope", "$routeParams", "Dashboard", "Widget", function($scope, $routeParams, Dashboard, Widget) { $scope.dashboard = Dashboard.get({ id: $routeParams.id }); $scope.widgets = Widget.query({ dashboard_id: $routeParams.id }, function() { $rootScope.resolved = true; }); } ● The Dashboard.get loads the current dashboard from Rails ● Using the dashboard_id from above, the Widget.query method sends a rest api call to Rails controller for get all widgets for the dashboard_id ● The parameters “Dashboard” and “Widget” are Angularjs services.
  • 17. Setup Rails Dashboards controller: module Api class DashboardsController respond_to :json def index @user_id = current_user.id dashboards = current_user.apps respond_with dashboards end end end ● The rails dashboards controller loads all stored widgets from the model and sends a response to angularjs dashboard controller.
  • 18. Setup dashboard service: app.factory("Dashboard", ["$resource", function($resource) { return $resource("/api/dashboards/:id.json", { id: "@id" }, { 'show': { method: 'GET', isArray: false } }); }]); ● This call the /api/dashboards/ url of the rails controller where the dashboard model (state), eg: how will my dashboard view look like ? is loaded.
  • 19. Setup widget service: app.factory("Widget", ["$resource", function($resource) { return $resource("/api/dashboards/:dashboard_id/widgets/:id.json", { id: "@id", dashboard_id: "@dashboard_id" }, { 'index': { method: 'GET', isArray: true }, 'show': { method: 'GET', isArray: false }, } ); }]); ● This calls the /api/dashboards/:dashboard_id/widgets/id url of the rails controller where the widgets in the dashboard model (state), eg: how will my widgets in dashboard view look like ? is loaded.
  • 20. Setup dashboard template: <div id="content-header" class="mini"> <ul class="mini-stats box-3"> <li class="widget" ng-repeat="widget in widgets" widgetpernode></li> </ul> </div> ● DashController in Rails will render the above template. ● All the widgets will be shown in this template. The “widgetpernode” is an angularjs directive of widget. ● The “ng-repeat="widget in widgets”” is equivalent to for loop, widgets contains list of widgets.
  • 21. Setup widget controller: app.controller("WidgetCtrl", ["$scope", function($scope) { //graph : draws a running graph }]); The widget controller set actions for single widget, For eg: to draw a graph in widget to be put the following code var plot1 = $.plot("#cpu_system_graph",FlotrGraphHelper.transformSeriesOfDatapoints(cpu_system_data, scope.widget, currentColors), FlotrGraphHelper.defaultOptions(scope.widget, "cpu_system")); plot1.setData(FlotrGraphHelper.transformSeriesOfDatapoints(cpu_system_data, scope.widget, currentColors)); plot1.draw();
  • 22. Setup widget template: <div class="row"> <div class="col-xs-11 col-sm-11 col-md-11"> <h1><small>CPU Usage </small></h1> <div id="cpu_system_graph"></div> </div> </div> ● The widget controller rendered this widget template and draw the graph into the “cpu_system_graph” location.
  • 23. Setup dashboard directive: app.directive("widgetpernode", ["$compile", function($compile) { var linkFn = function(scope, element, attrs) { var elm = element.find(".widget_content"); elm.append('<div '+ scope.widget.name + ' />'); $compile(elm)(scope); }; return { controller: "WidgetCtrl", templateUrl: 'angular/templates/widget/show.html.erb', link: linkFn }; }]); ● widgetpernode directive, renders using angularjs WidgetCtrl and templateUrl : angular/templates/widgets/show.html.erb.
  • 24. http://www.gomegam.com https://www.megam.co code : https://github.com/megamsys/nilavu.git email : rajthilak@megam.co.in twitter:@megamsystems