SlideShare a Scribd company logo
Real Angular App Architecture
How To Keep It Simple But Powerful
Angular Is “Only” A Framework
• The way you organise your app is crucial
Module 1
Service A
Service B
Controller A
Controller B
Template A
Directive A
Directive B
…
Module 2
Service A
Service B
Controller A
Controller B
Template A
Directive A
Directive B
…
Module 3
Service A
Service B
Controller A
Controller B
Template A
Directive A
Directive B
…
…
Your App
Main Angular Building Parts -
Modules
• What it is: Definition of application part or feature bundle, it has module name and
dependencies array - angular.module(‘myModule’, [‘yourModule’,’theirModule’]);
• Do: Bundle controllers, directives, services, configs, etc… to one module, e.g.
markdown editor module - mdService, mdController, mdDirective
• Do: Usually one application can have more than 50 modules - included module
can be depended on another module, etc…
• Do: Use .config(…) to setup module on initialising or .run(…) on app starting
• Do: Lazy load whole modules include 3rd-party libs, implement something like
(https://github.com/ocombe/ocLazyLoad) to load .js files on demand when route
match
• Be Aware: Naming conflicts - AngularJS app has a single injector that holds
names for all objects without respect to module names, when two or more modules
has service, controller or directive with the same name, it will override it
Main Angular Building Parts -
Services
• What it is: Business logic holders, services are constructors or
singletons, there are 3 “almost same” types of services in angular
(service, factory, provider)
• Do: Let services hold complexity - make slim controllers and
directives
• Do: Reuse services by other services, controllers, directives,
configs, etc…
• Do: Wrap 3-rd party libraries into services, never reference globals
in angular, always use angular built-in dependency injection
• Don’t: Manipulate DOM elements inside services, only directives
should do it
Main Angular Building Parts -
Controllers
• What it is: Their purpose is to publish objects to $scope that is
used by templates to view and modify data
• Do: Make slim controllers, let services hold complexity
• Do: Use $scope events wisely, or don’t use it at all, services can
handle communication between controllers very well
• Do: For better performance, use $digest instead of $apply
($digest will do same as $apply but in current scope, not in
$rootScope)
• Don’t: Manipulate DOM elements inside controllers, only
directives should do it
Main Angular Building Parts -
Directives
• What it is: Repeated UI functionality wrappers, e.g. ng-repeat,
ng-model, dropdown, datepicker, or more complex like tree
views, etc…
• Do: Combine simple directives to build complex one, e.g.
dropdown+multi datepickers+multi timepickers
• Do: Manipulate DOM inside directive
• Do: Use $scope.$on(‘$destroy’, function(){ … }) to unbind all
listeners registered by directive to prevent memory leaks
• Don’t: Write large directives - split it to several small directives
by reusable behaviours
Main Angular Building Parts -
Templates
• What it is: HTML templates used by angular to generate DOM elements
• Do: Use one-time binding {{::mymodel}} in static data, such as localised
labels, for better performance
• Do: Sometimes is good idea to include template HTML in page, like <script
type=“text/ng-template” id=“mytemplate.html”> to avoid too many requests
• Do: Sometimes is good idea to define template in module .js file, like
angular bootstrap ui does (https://angular-ui.github.io/bootstrap/)
• Do: Keep templates readable - if they grow, try to wrap some parts into
directives
• Don’t: Write long expressions in attributes or brackets, try to wrap it into
$scope method instead
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- Simple Loading Service used by
Loading Controller
- The only purpose is to view loading
icon and message to user if waiting for
server response
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- Simple Notification Service used by
Notifications Controller
- The Only purpose is to view small
notification messages (info, warning,
danger, error, success)
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- Data Buffer, if client is offline, it will
simulate $http service, but storing and
loading data in local DB
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- Angular core service for handling
AJAX
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- An instance of RestResource, it
provides a unified interface, other
services or controllers can easily get
info like pagination, list of items, etc…
- by default, there are methods like .find,
.one, .update, .create, .remove, but
can be configured to to handle any
other command
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- It can store components state, e.g.
Grid instance filter query, sorting,
current page
- It can store and restore all states from
URL
- It can undo, redo states, so can be
used to undo whole page state
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- UI component instances,
communicating via callbacks inside
controller - it is better than using
events
- In case there will be too many UI
component instances, you should split
controller and use service to
communicate between - but be aware of
too many components in one page, it is
not user friendly and will be slow
App Architecture Example
Angular $http
service
OfflineSync
service
Users Controller - publishing instances to template $scope
server
Grid Instance
(e.g. usersGrid)
Modal
Instance
QueryFilter
Instance
Tree
Instance
Main App Service
RestResource Instance (e.g. users)
Template - $scope methods DOM binding
ng-repeat=“user in
usersGrid.items”
ng-click= “usersGrid.
updateItem(user)”
{{user.name}} or ng-
model=“user.name”
Notifications
service StateService Instance (e.g. appState)
etc…
Loading Indicator
service
- Just simple pseudo example of usage
published $scope methods
Common Modules List
Example
• Rest Module - RestResource service, some request and response transformations
• Object Module - helper methods to manipulate object, such as deepGet, deepSet, objectToArray, etc…
• State Module - StateService and set of helpers
• Loading Module - loading indicator, and $http interceptors
• Notifications Module - simple messages
• Modals Module - modals management
• DragDrop Module - set of drag & drop directives and services
• ContentEditors Module - markdown, wysiwyg directives, parsing and generator services
• Localisation Module - simple localisation service, directives and filters
• Grid Module - grid behaviour service and directives
• Tree Module - tree view behaviour service and directives
• Query Module - advanced filter service and directives
• ocLazyLoad Module - https://github.com/ocombe/ocLazyLoad
• UIBootstrap Module - https://angular-ui.github.io/bootstrap/
Ad

More Related Content

What's hot (20)

Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
Wei Ru
 
IndexedDB - Querying and Performance
IndexedDB - Querying and PerformanceIndexedDB - Querying and Performance
IndexedDB - Querying and Performance
Parashuram N
 
Catalyst patterns-yapc-eu-2016
Catalyst patterns-yapc-eu-2016Catalyst patterns-yapc-eu-2016
Catalyst patterns-yapc-eu-2016
John Napiorkowski
 
Introduction to Vue.js
Introduction to Vue.jsIntroduction to Vue.js
Introduction to Vue.js
Meir Rotstein
 
Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
Andréia Bohner
 
AngularJS for designers and developers
AngularJS for designers and developersAngularJS for designers and developers
AngularJS for designers and developers
Kai Koenig
 
Angular Workshop_Sarajevo2
Angular Workshop_Sarajevo2Angular Workshop_Sarajevo2
Angular Workshop_Sarajevo2
Christoffer Noring
 
"Angular.js Concepts in Depth" by Aleksandar Simović
"Angular.js Concepts in Depth" by Aleksandar Simović"Angular.js Concepts in Depth" by Aleksandar Simović
"Angular.js Concepts in Depth" by Aleksandar Simović
JS Belgrade
 
Django Class-based views (Slovenian)
Django Class-based views (Slovenian)Django Class-based views (Slovenian)
Django Class-based views (Slovenian)
Luka Zakrajšek
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
Eyal Vardi
 
Modules and injector
Modules and injectorModules and injector
Modules and injector
Eyal Vardi
 
How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30
fiyuer
 
Angular modules in depth
Angular modules in depthAngular modules in depth
Angular modules in depth
Christoffer Noring
 
Angular In Depth
Angular In DepthAngular In Depth
Angular In Depth
Mindfire Solutions
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)
Chris Clarke
 
[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법
Jeado Ko
 
实战Ecos
实战Ecos实战Ecos
实战Ecos
wanglei999
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
Keith Bloomfield
 
Planbox Backbone MVC
Planbox Backbone MVCPlanbox Backbone MVC
Planbox Backbone MVC
Acquisio
 
The AngularJS way
The AngularJS wayThe AngularJS way
The AngularJS way
Boyan Mihaylov
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
Wei Ru
 
IndexedDB - Querying and Performance
IndexedDB - Querying and PerformanceIndexedDB - Querying and Performance
IndexedDB - Querying and Performance
Parashuram N
 
Catalyst patterns-yapc-eu-2016
Catalyst patterns-yapc-eu-2016Catalyst patterns-yapc-eu-2016
Catalyst patterns-yapc-eu-2016
John Napiorkowski
 
Introduction to Vue.js
Introduction to Vue.jsIntroduction to Vue.js
Introduction to Vue.js
Meir Rotstein
 
AngularJS for designers and developers
AngularJS for designers and developersAngularJS for designers and developers
AngularJS for designers and developers
Kai Koenig
 
"Angular.js Concepts in Depth" by Aleksandar Simović
"Angular.js Concepts in Depth" by Aleksandar Simović"Angular.js Concepts in Depth" by Aleksandar Simović
"Angular.js Concepts in Depth" by Aleksandar Simović
JS Belgrade
 
Django Class-based views (Slovenian)
Django Class-based views (Slovenian)Django Class-based views (Slovenian)
Django Class-based views (Slovenian)
Luka Zakrajšek
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
Eyal Vardi
 
Modules and injector
Modules and injectorModules and injector
Modules and injector
Eyal Vardi
 
How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30How to disassemble one monster app into an ecosystem of 30
How to disassemble one monster app into an ecosystem of 30
fiyuer
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)
Chris Clarke
 
[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법
Jeado Ko
 
Planbox Backbone MVC
Planbox Backbone MVCPlanbox Backbone MVC
Planbox Backbone MVC
Acquisio
 

Viewers also liked (20)

Vijay konathala Resume
Vijay konathala ResumeVijay konathala Resume
Vijay konathala Resume
vijay kumar
 
European Location Framework and INSPIRE
European Location Framework and INSPIREEuropean Location Framework and INSPIRE
European Location Framework and INSPIRE
Antti Jakobsson
 
Grant Avenue Florist Wedding Slideshow
Grant Avenue Florist Wedding SlideshowGrant Avenue Florist Wedding Slideshow
Grant Avenue Florist Wedding Slideshow
Michele Querin
 
Sombras Internas
Sombras InternasSombras Internas
Sombras Internas
Patrick Steven Waldtmann
 
EPiServer Charts
EPiServer ChartsEPiServer Charts
EPiServer Charts
Patrick van Kleef
 
Presentazione tesi maja_crljenko
Presentazione tesi maja_crljenkoPresentazione tesi maja_crljenko
Presentazione tesi maja_crljenko
Maja Crljenko
 
Webshoppers 28ª edição - 2013
Webshoppers 28ª edição - 2013Webshoppers 28ª edição - 2013
Webshoppers 28ª edição - 2013
Thiago Sarraf - Especialista em E-commerce
 
Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...
Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...
Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...
giovanni biallo
 
Up Global - Fostering a startup ecosystem (full report)
Up Global - Fostering a startup ecosystem (full report)Up Global - Fostering a startup ecosystem (full report)
Up Global - Fostering a startup ecosystem (full report)
Startupi
 
Dive into Angular, part 4: Angular 2.0
Dive into Angular, part 4: Angular 2.0Dive into Angular, part 4: Angular 2.0
Dive into Angular, part 4: Angular 2.0
Oleksii Prohonnyi
 
Using the extensibility benefits of EPiServer
Using the extensibility benefits of EPiServerUsing the extensibility benefits of EPiServer
Using the extensibility benefits of EPiServer
Patrick van Kleef
 
TLC lição 2
TLC lição 2TLC lição 2
TLC lição 2
vagner costa
 
Indra - AviationMENA
Indra - AviationMENAIndra - AviationMENA
Indra - AviationMENA
Pablo Salcedo
 
Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)
Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)
Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)
Joemille Leal
 
Le competenze a servizio dell'internazionalizzazione - Marco Q Rossi & Assoc...
Le competenze a servizio dell'internazionalizzazione -  Marco Q Rossi & Assoc...Le competenze a servizio dell'internazionalizzazione -  Marco Q Rossi & Assoc...
Le competenze a servizio dell'internazionalizzazione - Marco Q Rossi & Assoc...
CentoCinquanta srl
 
Palestra cinco dicas para vender em época de crise
Palestra cinco dicas para vender em época de crisePalestra cinco dicas para vender em época de crise
Palestra cinco dicas para vender em época de crise
Landoaldo Lima
 
RESTful SOA and the Spring Framework (EMCWorld 2011)
RESTful SOA and the Spring Framework (EMCWorld 2011)RESTful SOA and the Spring Framework (EMCWorld 2011)
RESTful SOA and the Spring Framework (EMCWorld 2011)
EMC
 
Morgenbooster #68 | Unfold your Brand
Morgenbooster #68 | Unfold your Brand Morgenbooster #68 | Unfold your Brand
Morgenbooster #68 | Unfold your Brand
1508 A/S
 
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Matt Raible
 
Vijay konathala Resume
Vijay konathala ResumeVijay konathala Resume
Vijay konathala Resume
vijay kumar
 
European Location Framework and INSPIRE
European Location Framework and INSPIREEuropean Location Framework and INSPIRE
European Location Framework and INSPIRE
Antti Jakobsson
 
Grant Avenue Florist Wedding Slideshow
Grant Avenue Florist Wedding SlideshowGrant Avenue Florist Wedding Slideshow
Grant Avenue Florist Wedding Slideshow
Michele Querin
 
Presentazione tesi maja_crljenko
Presentazione tesi maja_crljenkoPresentazione tesi maja_crljenko
Presentazione tesi maja_crljenko
Maja Crljenko
 
Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...
Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...
Conferenza OpenGeoData 2016 - Servizi in cloud per i big data satellitari, nu...
giovanni biallo
 
Up Global - Fostering a startup ecosystem (full report)
Up Global - Fostering a startup ecosystem (full report)Up Global - Fostering a startup ecosystem (full report)
Up Global - Fostering a startup ecosystem (full report)
Startupi
 
Dive into Angular, part 4: Angular 2.0
Dive into Angular, part 4: Angular 2.0Dive into Angular, part 4: Angular 2.0
Dive into Angular, part 4: Angular 2.0
Oleksii Prohonnyi
 
Using the extensibility benefits of EPiServer
Using the extensibility benefits of EPiServerUsing the extensibility benefits of EPiServer
Using the extensibility benefits of EPiServer
Patrick van Kleef
 
Indra - AviationMENA
Indra - AviationMENAIndra - AviationMENA
Indra - AviationMENA
Pablo Salcedo
 
Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)
Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)
Entenda de vez a crise no brasil (+ 3 dicas para SUPERAR)
Joemille Leal
 
Le competenze a servizio dell'internazionalizzazione - Marco Q Rossi & Assoc...
Le competenze a servizio dell'internazionalizzazione -  Marco Q Rossi & Assoc...Le competenze a servizio dell'internazionalizzazione -  Marco Q Rossi & Assoc...
Le competenze a servizio dell'internazionalizzazione - Marco Q Rossi & Assoc...
CentoCinquanta srl
 
Palestra cinco dicas para vender em época de crise
Palestra cinco dicas para vender em época de crisePalestra cinco dicas para vender em época de crise
Palestra cinco dicas para vender em época de crise
Landoaldo Lima
 
RESTful SOA and the Spring Framework (EMCWorld 2011)
RESTful SOA and the Spring Framework (EMCWorld 2011)RESTful SOA and the Spring Framework (EMCWorld 2011)
RESTful SOA and the Spring Framework (EMCWorld 2011)
EMC
 
Morgenbooster #68 | Unfold your Brand
Morgenbooster #68 | Unfold your Brand Morgenbooster #68 | Unfold your Brand
Morgenbooster #68 | Unfold your Brand
1508 A/S
 
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Matt Raible
 
Ad

Similar to Angular presentation (20)

Angular js-crash-course
Angular js-crash-courseAngular js-crash-course
Angular js-crash-course
Keith Bloomfield
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
Filip Janevski
 
Angular js
Angular jsAngular js
Angular js
Baldeep Sohal
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development Guide
Nitin Giri
 
AngularJS
AngularJSAngularJS
AngularJS
Srivatsan Krishnamachari
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
Aayush Shrestha
 
Introduction to AngularJs
Introduction to AngularJsIntroduction to AngularJs
Introduction to AngularJs
murtazahaveliwala
 
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
murtazahaveliwala
 
Angular basicschat
Angular basicschatAngular basicschat
Angular basicschat
Yu Jin
 
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
 
AngularJS Best Practices
AngularJS Best PracticesAngularJS Best Practices
AngularJS Best Practices
Betclic Everest Group Tech Team
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014
Ran Wahle
 
Angular
AngularAngular
Angular
LearningTech
 
Angular
AngularAngular
Angular
LearningTech
 
Angular training - Day 3 - custom directives, $http, $resource, setup with ye...
Angular training - Day 3 - custom directives, $http, $resource, setup with ye...Angular training - Day 3 - custom directives, $http, $resource, setup with ye...
Angular training - Day 3 - custom directives, $http, $resource, setup with ye...
murtazahaveliwala
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete Course
EPAM Systems
 
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
 
Angular Js Basics
Angular Js BasicsAngular Js Basics
Angular Js Basics
أحمد عبد الوهاب
 
introduction to Angularjs basics
introduction to Angularjs basicsintroduction to Angularjs basics
introduction to Angularjs basics
Ravindra K
 
Angularjs Basics
Angularjs BasicsAngularjs Basics
Angularjs Basics
Anuradha Bandara
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development Guide
Nitin Giri
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
Aayush Shrestha
 
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
murtazahaveliwala
 
Angular basicschat
Angular basicschatAngular basicschat
Angular basicschat
Yu Jin
 
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
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014
Ran Wahle
 
Angular training - Day 3 - custom directives, $http, $resource, setup with ye...
Angular training - Day 3 - custom directives, $http, $resource, setup with ye...Angular training - Day 3 - custom directives, $http, $resource, setup with ye...
Angular training - Day 3 - custom directives, $http, $resource, setup with ye...
murtazahaveliwala
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete Course
EPAM Systems
 
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
 
introduction to Angularjs basics
introduction to Angularjs basicsintroduction to Angularjs basics
introduction to Angularjs basics
Ravindra K
 
Ad

Recently uploaded (20)

Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Eric D. Schabell
 
EASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License CodeEASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License Code
aneelaramzan63
 
Automation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath CertificateAutomation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath Certificate
VICTOR MAESTRE RAMIREZ
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
Adobe Lightroom Classic Crack FREE Latest link 2025
Adobe Lightroom Classic Crack FREE Latest link 2025Adobe Lightroom Classic Crack FREE Latest link 2025
Adobe Lightroom Classic Crack FREE Latest link 2025
kashifyounis067
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Orangescrum
 
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
steaveroggers
 
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
Egor Kaleynik
 
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New VersionPixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
saimabibi60507
 
Meet the Agents: How AI Is Learning to Think, Plan, and Collaborate
Meet the Agents: How AI Is Learning to Think, Plan, and CollaborateMeet the Agents: How AI Is Learning to Think, Plan, and Collaborate
Meet the Agents: How AI Is Learning to Think, Plan, and Collaborate
Maxim Salnikov
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdf
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdfMicrosoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdf
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdf
TechSoup
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Ranjan Baisak
 
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Eric D. Schabell
 
EASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License CodeEASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License Code
aneelaramzan63
 
Automation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath CertificateAutomation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath Certificate
VICTOR MAESTRE RAMIREZ
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
Adobe Lightroom Classic Crack FREE Latest link 2025
Adobe Lightroom Classic Crack FREE Latest link 2025Adobe Lightroom Classic Crack FREE Latest link 2025
Adobe Lightroom Classic Crack FREE Latest link 2025
kashifyounis067
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Orangescrum
 
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
steaveroggers
 
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
Egor Kaleynik
 
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New VersionPixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
saimabibi60507
 
Meet the Agents: How AI Is Learning to Think, Plan, and Collaborate
Meet the Agents: How AI Is Learning to Think, Plan, and CollaborateMeet the Agents: How AI Is Learning to Think, Plan, and Collaborate
Meet the Agents: How AI Is Learning to Think, Plan, and Collaborate
Maxim Salnikov
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdf
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdfMicrosoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdf
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdf
TechSoup
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Ranjan Baisak
 

Angular presentation

  • 1. Real Angular App Architecture How To Keep It Simple But Powerful
  • 2. Angular Is “Only” A Framework • The way you organise your app is crucial Module 1 Service A Service B Controller A Controller B Template A Directive A Directive B … Module 2 Service A Service B Controller A Controller B Template A Directive A Directive B … Module 3 Service A Service B Controller A Controller B Template A Directive A Directive B … … Your App
  • 3. Main Angular Building Parts - Modules • What it is: Definition of application part or feature bundle, it has module name and dependencies array - angular.module(‘myModule’, [‘yourModule’,’theirModule’]); • Do: Bundle controllers, directives, services, configs, etc… to one module, e.g. markdown editor module - mdService, mdController, mdDirective • Do: Usually one application can have more than 50 modules - included module can be depended on another module, etc… • Do: Use .config(…) to setup module on initialising or .run(…) on app starting • Do: Lazy load whole modules include 3rd-party libs, implement something like (https://github.com/ocombe/ocLazyLoad) to load .js files on demand when route match • Be Aware: Naming conflicts - AngularJS app has a single injector that holds names for all objects without respect to module names, when two or more modules has service, controller or directive with the same name, it will override it
  • 4. Main Angular Building Parts - Services • What it is: Business logic holders, services are constructors or singletons, there are 3 “almost same” types of services in angular (service, factory, provider) • Do: Let services hold complexity - make slim controllers and directives • Do: Reuse services by other services, controllers, directives, configs, etc… • Do: Wrap 3-rd party libraries into services, never reference globals in angular, always use angular built-in dependency injection • Don’t: Manipulate DOM elements inside services, only directives should do it
  • 5. Main Angular Building Parts - Controllers • What it is: Their purpose is to publish objects to $scope that is used by templates to view and modify data • Do: Make slim controllers, let services hold complexity • Do: Use $scope events wisely, or don’t use it at all, services can handle communication between controllers very well • Do: For better performance, use $digest instead of $apply ($digest will do same as $apply but in current scope, not in $rootScope) • Don’t: Manipulate DOM elements inside controllers, only directives should do it
  • 6. Main Angular Building Parts - Directives • What it is: Repeated UI functionality wrappers, e.g. ng-repeat, ng-model, dropdown, datepicker, or more complex like tree views, etc… • Do: Combine simple directives to build complex one, e.g. dropdown+multi datepickers+multi timepickers • Do: Manipulate DOM inside directive • Do: Use $scope.$on(‘$destroy’, function(){ … }) to unbind all listeners registered by directive to prevent memory leaks • Don’t: Write large directives - split it to several small directives by reusable behaviours
  • 7. Main Angular Building Parts - Templates • What it is: HTML templates used by angular to generate DOM elements • Do: Use one-time binding {{::mymodel}} in static data, such as localised labels, for better performance • Do: Sometimes is good idea to include template HTML in page, like <script type=“text/ng-template” id=“mytemplate.html”> to avoid too many requests • Do: Sometimes is good idea to define template in module .js file, like angular bootstrap ui does (https://angular-ui.github.io/bootstrap/) • Do: Keep templates readable - if they grow, try to wrap some parts into directives • Don’t: Write long expressions in attributes or brackets, try to wrap it into $scope method instead
  • 8. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service
  • 9. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - Simple Loading Service used by Loading Controller - The only purpose is to view loading icon and message to user if waiting for server response
  • 10. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - Simple Notification Service used by Notifications Controller - The Only purpose is to view small notification messages (info, warning, danger, error, success)
  • 11. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - Data Buffer, if client is offline, it will simulate $http service, but storing and loading data in local DB
  • 12. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - Angular core service for handling AJAX
  • 13. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - An instance of RestResource, it provides a unified interface, other services or controllers can easily get info like pagination, list of items, etc… - by default, there are methods like .find, .one, .update, .create, .remove, but can be configured to to handle any other command
  • 14. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - It can store components state, e.g. Grid instance filter query, sorting, current page - It can store and restore all states from URL - It can undo, redo states, so can be used to undo whole page state
  • 15. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - UI component instances, communicating via callbacks inside controller - it is better than using events - In case there will be too many UI component instances, you should split controller and use service to communicate between - but be aware of too many components in one page, it is not user friendly and will be slow
  • 16. App Architecture Example Angular $http service OfflineSync service Users Controller - publishing instances to template $scope server Grid Instance (e.g. usersGrid) Modal Instance QueryFilter Instance Tree Instance Main App Service RestResource Instance (e.g. users) Template - $scope methods DOM binding ng-repeat=“user in usersGrid.items” ng-click= “usersGrid. updateItem(user)” {{user.name}} or ng- model=“user.name” Notifications service StateService Instance (e.g. appState) etc… Loading Indicator service - Just simple pseudo example of usage published $scope methods
  • 17. Common Modules List Example • Rest Module - RestResource service, some request and response transformations • Object Module - helper methods to manipulate object, such as deepGet, deepSet, objectToArray, etc… • State Module - StateService and set of helpers • Loading Module - loading indicator, and $http interceptors • Notifications Module - simple messages • Modals Module - modals management • DragDrop Module - set of drag & drop directives and services • ContentEditors Module - markdown, wysiwyg directives, parsing and generator services • Localisation Module - simple localisation service, directives and filters • Grid Module - grid behaviour service and directives • Tree Module - tree view behaviour service and directives • Query Module - advanced filter service and directives • ocLazyLoad Module - https://github.com/ocombe/ocLazyLoad • UIBootstrap Module - https://angular-ui.github.io/bootstrap/