SlideShare a Scribd company logo
AngularJS ­ Javascript framework for superheroes
Sponsors
         
Media Partners
       
Back in time...
... when the dinosaurs rule the Earth
Websites instead of webapps
Client seen as a dumb interface
All the workload handled by the server
No client­side logic
Javascript coders seen as web designers
Getting into present days...
AJAX ­ HTML5 ­ CSS3
Web 2.0
Client splitted from server
Lots of new Javascript libraries
Web application
Javascript: the answer!
Javascript framework
MVC Architecture
Big web apps
A current problem
Too much time
Too much code
Too much stress
Building client­side webapp is still hard
DOM Manipulation
Data validation
Angular for the win!
Data­binding
Basic templating directives
Form validation
Routing
Reusable components
Dependency injection
Unit­testing
Bootstrapping
Load HTML DOM
Load the module associated with the directive
Create the application injector
Compile the DOM treating the ng­app directive as the root of the compilation
Conceptual Overview
1.  The browser loads the HTML and parses it into a DOM
2.  The browser loads angular.js script
3.  Angular waits for DOMContentLoaded event
4.  Angular looks for ng­app directive, which designates the application boundary
5.  The Module specified in ng­app (if any) is used to configure the $injector
6.  The $injector is used to create the $compile service as well as $rootScope
7.  The $compile service is used to compile the DOM and link it with $rootScope
HTML Compiler
Compiler is an angular service which traverses the DOM looking for attributes
Compile: traverse the DOM and collect all of the directives. The result is a linking function
Link: combine the directives with a scope and produce a live view. Any changes in the scope model are reflected in the
view, and any user interactions with the view are reflected in the scope model. This makes the scope model the single
source of truth
Conceptual Overview
Also knows as Model View ­ View Model (MVVM)
Scope & View
The scope is responsible for detecting changes to the model section and provides the execution
context for expressions
The browser parses the HTML into the DOM, and the DOM
becomes the input to the template engine known as the
compiler. The compiler looks for directives which in turn set
up watches on the model. The result is a continuously
updating view which does not need template model re­
merging. Your model becomes the single source­of­truth for
your view.
Example Code
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<h1>Hello {{yourName}}!</h1>
Enter a name here
Hello !
Directives
A directive is a behavior or DOM transformation which is triggered by the presence of a custom
attribute, element name, or a class name. A directive allows you to extend the HTML vocabulary
in a declarative fashion
Directives Example
angular.module('Presentation', [])
.controller('DirectiveController', ['$scope', function ($scope) {
$scope.customer = {
name: 'Naomi',
address: '1600 Amphitheatre'
};
}])
.directive('myCustomer', function () {
return {
template: '<b>Name</b>: {{customer.name}} <b>Address</b>: {{customer.add
};
});
// HTML
<div ng-controller="DirectiveController">
<div my-customer></div>
</div>
Name: Naomi Address: 1600 Amphitheatre
Filters
Filters perform data transformation. Typically they are used in conjunction with the locale to
format the data in locale specific output. They follow the spirit of UNIX filters and use similar
syntax | (pipe)
Filters Example
<div>Formatted number: {{val | number:2}}</div>
<div>Your name (in lowercase): {{user.name | lowercase}}</div>
Formatted number:
Enter a name here
Your name (in lowercase):
Client­Side Routing
$route is used for deep­linking URLs to controllers and views (HTML partials).
It watches $location.url() and tries to map the path to an existing route definition. You can
define routes through $routeProvider's API.
The $route service is typically used in conjunction with the ngView directive and the
$routeParams service.
Routing Example
angular.module('MyApp', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/user/:id', {
templateUrl: 'views/user.html',
controller: 'UserController'
});
})
.controller('UserController', ['$scope', '$route', function ($scope, $route) {
$scope.userId = $route.current.params.id;
});
Services
Angular services are substitutable objects that are wired together using dependency injection
(DI). You can use services to organize and share code across your app.
Angular services are:
Lazily instantiated: Angular only instantiates a service when an application component depends
on it
Singletons: Each component dependent on a service gets a reference to the single instance
generated by the service factory
Angular offers several useful services (like $http), but for most applications you'll also want to
create your own.
Services Example
angular.module('Presentation', [])
.service('notify', ['$window', function (window) {
var msgs = [];
return function (msg) {
msgs.push(msg);
if (msgs.length > 2) {
window.alert(msgs);
msgs = [];
}
};
})
.controller('ServiceController', ['$scope', 'notify',
function ($scope, notify) {
$scope.notify = notify;
});
// HTML
<div ng-controller="ServiceController">
<input type="text" ng-init="message='Developers'" ng-model="message"/>
<button ng-click="notify(message)") Notify</button>
</div>
Developers  Notify
Form
Form is simply a group of controls. Angular gives state to each of them, such as pristine, dirty, valid, invalid
Angular form creates an instance of FormController. FormController itself has methods and properties:
formName.$pristine: TRUE if the user has not interacted with the form yet
formName.$dirty: TRUE if the user has already interacted with the form.
formName.$valid: TRUE if all containing form and controls are valid
formName.$invalid: TRUE if at least one containing form and control is invalid.
formName.$error: Is an object hash, containing references to all invalid controls or forms
Form States
It is important to understand flow of the form states in order to use angular form properly. This flow gives you visualization
of the form state from the very first time the form is rendered until the user has finished filling the form
Flow 1: pristine and invalid ­ When the form is first rendered and the user has not interacted with the form yet.
Flow 2: dirty and invalid ­ User has interacted with the form, but validity has not been satisfied, yet
Flow 3: dirty and valid ­ User has finished filling the form and all the validation rule has been satisfied
Form Example (HTML)
<div ng-controller="FormController">
<form name="form" class="css-form" novalidate>
Name:
<input type="text" ng-model="user.name" name="uName" required/>
<br/>E-mail:
<input type="email" ng-model="user.email" name="uEmail" required/>
<br/>
<div ng-show="form.uEmail.$dirty && form.uEmail.$invalid">Invalid:
<span ng-show="form.uEmail.$error.required">
Tell us your email.
</span>
<span ng-show="form.uEmail.$error.email">
This is not a valid email.
</span>
</div>
<input type="checkbox" ng-model="user.agree"
name="userAgree" required/>
I agree<br/>
<div ng-show="!user.agree">
Please agree.
</div>
<button ng-click="reset()" ng-disabled="isUnchanged(user)">
RESET
</button>
<button ng-click="update(user)"
ng-disabled="form.$invalid || isUnchanged(user)">
SAVE
</button>
Form Example (Javascript)
function FormController ($scope) {
$scope.master = {};
$scope.update = function (user) {
$scope.master = angular.copy(user);
};
$scope.reset = function () {
$scope.user = angular.copy($scope.master);
};
$scope.isUnchanged = function (user) {
return angular.equals(user, $scope.master);
};
$scope.reset();
}
Form Live Example
Name: 
E­mail: 
I agree
Please agree.
RESET  SAVE
Unit Testing
Unit testing as the name implies is about testing individual units of code. What makes each
application unique is its logic, and the logic is what we would like to test. If the logic for your
application contains DOM manipulation, it will be hard to test. In angular the controllers are
strictly separated from the DOM manipulation logic and this results in a much easier testability
story.
AngularJS uses Jasmine as unit testing and E2E framework
Unit testing example
function PasswordCtrl ($scope) {
$scope.password = '';
$scope.grade = function () {
var size = $scope.password.length;
if (size > 8) {
$scope.strength = 'strong';
} else if (size > 3) {
$scope.strength = 'medium';
} else {
$scope.strength = 'weak';
}
};
}
var $scope = {};
var pc = $controller('PasswordCtrl', {$scope: $scope});
$scope.password = 'abc';
$scope.grade();
expect($scope.strength).toEqual('weak');
E2E testing example
It's quite easy to test services, directives, filters, controllers, etc with AngularJS and Jasmine
describe('service', function () {
beforeEach(module('myApp.services'));
describe('version', function () {
it('should return current version', inject(function (version) {
expect(version).toEqual('0.1');
}));
});
});
Vincenzo (Wilk) Ferrari
 vincenzo@ibuildings.it
 @__wilky__
 github.com/wilk
  fork slides
 live slides
Ad

Recommended

Angularjs practical project experiences with javascript development in a bank
Angularjs practical project experiences with javascript development in a bank
David Amend
 
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
george.james
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
David Amend
 
Client Side rendering Not so Easy
Client Side rendering Not so Easy
nuria_ruiz
 
Java Script - A New Look
Java Script - A New Look
rumsan
 
From MEAN to the MERN Stack
From MEAN to the MERN Stack
Troy Miles
 
Building single page applications
Building single page applications
SC5.io
 
MongoDB Days UK: Building Apps with the MEAN Stack
MongoDB Days UK: Building Apps with the MEAN Stack
MongoDB
 
Design & Development of Web Applications using SpringMVC
Design & Development of Web Applications using SpringMVC
Naresh Chintalcheru
 
Kickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with Yeoman
Patrick Buergin
 
Web Components Everywhere
Web Components Everywhere
Ilia Idakiev
 
JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)
Steve Souders
 
Ajax ppt - 32 slides
Ajax ppt - 32 slides
Smithss25
 
Node.js Crash Course (Jump Start)
Node.js Crash Course (Jump Start)
Haim Michael
 
Comparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAs
Jennifer Estrada
 
Single Page WebApp Architecture
Single Page WebApp Architecture
Morgan Cheng
 
MEAN Stack
MEAN Stack
RoshanTak1
 
AngularJS Basics
AngularJS Basics
Ravi Mone
 
HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!
Iker Jamardo
 
Html5 with Vaadin and Scala
Html5 with Vaadin and Scala
Joonas Lehtinen
 
Fast mobile web apps
Fast mobile web apps
Ivano Malavolta
 
Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015
Sami Ekblad
 
Selecting the Best Javascript Web Framework
Selecting the Best Javascript Web Framework
Rajitha Pathiraja
 
Wakanda - apps.berlin.js - 2012-11-29
Wakanda - apps.berlin.js - 2012-11-29
Alexandre Morgaut
 
Web Components
Web Components
Nikolaus Graf
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application Development
Christian Baranowski
 
Single Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJS
M R Rony
 
Web components
Web components
Gil Fink
 
Watch everything, Watch anything
Watch everything, Watch anything
Nathaniel Cook
 
CV
CV
Ni Rongjian
 

More Related Content

What's hot (20)

Design & Development of Web Applications using SpringMVC
Design & Development of Web Applications using SpringMVC
Naresh Chintalcheru
 
Kickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with Yeoman
Patrick Buergin
 
Web Components Everywhere
Web Components Everywhere
Ilia Idakiev
 
JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)
Steve Souders
 
Ajax ppt - 32 slides
Ajax ppt - 32 slides
Smithss25
 
Node.js Crash Course (Jump Start)
Node.js Crash Course (Jump Start)
Haim Michael
 
Comparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAs
Jennifer Estrada
 
Single Page WebApp Architecture
Single Page WebApp Architecture
Morgan Cheng
 
MEAN Stack
MEAN Stack
RoshanTak1
 
AngularJS Basics
AngularJS Basics
Ravi Mone
 
HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!
Iker Jamardo
 
Html5 with Vaadin and Scala
Html5 with Vaadin and Scala
Joonas Lehtinen
 
Fast mobile web apps
Fast mobile web apps
Ivano Malavolta
 
Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015
Sami Ekblad
 
Selecting the Best Javascript Web Framework
Selecting the Best Javascript Web Framework
Rajitha Pathiraja
 
Wakanda - apps.berlin.js - 2012-11-29
Wakanda - apps.berlin.js - 2012-11-29
Alexandre Morgaut
 
Web Components
Web Components
Nikolaus Graf
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application Development
Christian Baranowski
 
Single Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJS
M R Rony
 
Web components
Web components
Gil Fink
 
Design & Development of Web Applications using SpringMVC
Design & Development of Web Applications using SpringMVC
Naresh Chintalcheru
 
Kickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with Yeoman
Patrick Buergin
 
Web Components Everywhere
Web Components Everywhere
Ilia Idakiev
 
JavaScript Performance (at SFJS)
JavaScript Performance (at SFJS)
Steve Souders
 
Ajax ppt - 32 slides
Ajax ppt - 32 slides
Smithss25
 
Node.js Crash Course (Jump Start)
Node.js Crash Course (Jump Start)
Haim Michael
 
Comparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAs
Jennifer Estrada
 
Single Page WebApp Architecture
Single Page WebApp Architecture
Morgan Cheng
 
AngularJS Basics
AngularJS Basics
Ravi Mone
 
HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!
Iker Jamardo
 
Html5 with Vaadin and Scala
Html5 with Vaadin and Scala
Joonas Lehtinen
 
Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015
Sami Ekblad
 
Selecting the Best Javascript Web Framework
Selecting the Best Javascript Web Framework
Rajitha Pathiraja
 
Wakanda - apps.berlin.js - 2012-11-29
Wakanda - apps.berlin.js - 2012-11-29
Alexandre Morgaut
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application Development
Christian Baranowski
 
Single Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJS
M R Rony
 
Web components
Web components
Gil Fink
 

Viewers also liked (7)

Watch everything, Watch anything
Watch everything, Watch anything
Nathaniel Cook
 
CV
CV
Ni Rongjian
 
Monitoring in a scalable world
Monitoring in a scalable world
TechExeter
 
Tick
Tick
Vincenzo Ferrari
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Seungmin Yu
 
Time Series Data with InfluxDB
Time Series Data with InfluxDB
Turi, Inc.
 
Beautiful Monitoring With Grafana and InfluxDB
Beautiful Monitoring With Grafana and InfluxDB
leesjensen
 
Watch everything, Watch anything
Watch everything, Watch anything
Nathaniel Cook
 
Monitoring in a scalable world
Monitoring in a scalable world
TechExeter
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Seungmin Yu
 
Time Series Data with InfluxDB
Time Series Data with InfluxDB
Turi, Inc.
 
Beautiful Monitoring With Grafana and InfluxDB
Beautiful Monitoring With Grafana and InfluxDB
leesjensen
 
Ad

Similar to AngularJS - Javascript framework for superheroes (20)

Angularjs
Angularjs
Vincenzo Ferrari
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS Fundamentals
Aviran Cohen
 
Introduction to Angularjs
Introduction to Angularjs
Manish Shekhawat
 
Introduction to Angularjs : kishan kumar
Introduction to Angularjs : kishan kumar
Appfinz Technologies
 
One Weekend With AngularJS
One Weekend With AngularJS
Yashobanta Bai
 
Getting Started With AngularJS
Getting Started With AngularJS
Edureka!
 
AngularJS for Beginners
AngularJS for Beginners
Edureka!
 
Getting Started with AngularJS
Getting Started with AngularJS
Edureka!
 
AngularJS Introduction
AngularJS Introduction
Brajesh Yadav
 
Angularjs for kolkata drupal meetup
Angularjs for kolkata drupal meetup
Goutam Dey
 
Training On Angular Js
Training On Angular Js
Mahima Radhakrishnan
 
AngularJS
AngularJS
Srivatsan Krishnamachari
 
Angular js
Angular js
Larry Ball
 
Kalp Corporate Angular Js Tutorials
Kalp Corporate Angular Js Tutorials
Kalp Corporate
 
Angular js
Angular js
Baldeep Sohal
 
CraftCamp for Students - Introduction to AngularJS
CraftCamp for Students - Introduction to AngularJS
craftworkz
 
angularjs_tutorial.docx
angularjs_tutorial.docx
telegramvip
 
AngularJS Workshop
AngularJS Workshop
Gianluca Cacace
 
Angular JS training institute in Jaipur
Angular JS training institute in Jaipur
HEMANT SAXENA
 
AngularJs
AngularJs
Abdhesh Kumar
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS Fundamentals
Aviran Cohen
 
Introduction to Angularjs : kishan kumar
Introduction to Angularjs : kishan kumar
Appfinz Technologies
 
One Weekend With AngularJS
One Weekend With AngularJS
Yashobanta Bai
 
Getting Started With AngularJS
Getting Started With AngularJS
Edureka!
 
AngularJS for Beginners
AngularJS for Beginners
Edureka!
 
Getting Started with AngularJS
Getting Started with AngularJS
Edureka!
 
AngularJS Introduction
AngularJS Introduction
Brajesh Yadav
 
Angularjs for kolkata drupal meetup
Angularjs for kolkata drupal meetup
Goutam Dey
 
Kalp Corporate Angular Js Tutorials
Kalp Corporate Angular Js Tutorials
Kalp Corporate
 
CraftCamp for Students - Introduction to AngularJS
CraftCamp for Students - Introduction to AngularJS
craftworkz
 
angularjs_tutorial.docx
angularjs_tutorial.docx
telegramvip
 
Angular JS training institute in Jaipur
Angular JS training institute in Jaipur
HEMANT SAXENA
 
Ad

Recently uploaded (20)

Application Modernization with Choreo - The AI-Native Internal Developer Plat...
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
WSO2
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
Neuralink Templateeeeeeeeeeeeeeeeeeeeeeeeee
Neuralink Templateeeeeeeeeeeeeeeeeeeeeeeeee
alexandernoetzold
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Transmission Media. (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Reimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AI
Maxim Salnikov
 
SAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.ppt
MuhammadShaheryar36
 
Artificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across Industries
SandeepKS52
 
How the US Navy Approaches DevSecOps with Raise 2.0
How the US Navy Approaches DevSecOps with Raise 2.0
Anchore
 
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
Maharshi Mallela
 
IBM Rational Unified Process For Software Engineering - Introduction
IBM Rational Unified Process For Software Engineering - Introduction
Gaurav Sharma
 
Generative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its Applications
SandeepKS52
 
Migrating to Azure Cosmos DB the Right Way
Migrating to Azure Cosmos DB the Right Way
Alexander (Alex) Komyagin
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
FME as an Orchestration Tool - Peak of Data & AI 2025
FME as an Orchestration Tool - Peak of Data & AI 2025
Safe Software
 
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
WSO2
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
Neuralink Templateeeeeeeeeeeeeeeeeeeeeeeeee
Neuralink Templateeeeeeeeeeeeeeeeeeeeeeeeee
alexandernoetzold
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Transmission Media. (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Reimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AI
Maxim Salnikov
 
SAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.ppt
MuhammadShaheryar36
 
Artificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across Industries
SandeepKS52
 
How the US Navy Approaches DevSecOps with Raise 2.0
How the US Navy Approaches DevSecOps with Raise 2.0
Anchore
 
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
Maharshi Mallela
 
IBM Rational Unified Process For Software Engineering - Introduction
IBM Rational Unified Process For Software Engineering - Introduction
Gaurav Sharma
 
Generative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its Applications
SandeepKS52
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
FME as an Orchestration Tool - Peak of Data & AI 2025
FME as an Orchestration Tool - Peak of Data & AI 2025
Safe Software
 

AngularJS - Javascript framework for superheroes