SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
ANGULARJS 
DEC 2013
¡Quiero ser un superhéroe! 
“AngularJS is a toolset for building the framework most suited 
to your application development. It is fully extensible and 
Globant Proprietary | Confidential Information 
Angularjs.org 
works well with other libraries.”
¡Quiero ser un superhéroe! 
Globant Proprietary | Confidential Information
¡Quiero ser un superhéroe! 
Controller 
Injectable Testable 
Globant Proprietary | Confidential Information 
Data Binding 
POJO's 
Deep linking 
Form Validation 
Server 
Communication 
Directives 
Components 
Localization 
Embeddable
Conocé tus superpoderes 
Globant Proprietary | Confidential Information 
$scope 
Controllers 
Views 
Dependency Injection
Conocé tus superpoderes 
Modelo 
Conocé tus superpoderes | $scope 
POJO's (Plain Old JavaScript Object) 
$scope 
Globant Proprietary | Confidential Information 
Flexible 
No se rige por UAP (Uniform Access Principle) 
Nexo 
Puente de comunicación 
$rootScope
Conocé tus superpoderes 
Comportamiento 
Conocé tus superpoderes | Comtroller 
Permite definir el comportamiento detras del DOM 
Globant Proprietary | Confidential Information 
Encapsulación 
Mantiene el orden de forma pristina y legible 
Expresividad 
Robusto pero sin la necesidad de boilerplate 
Controller
Conocé tus superpoderes 
HTML 
Conocé tus superpoderes | View 
Las vistas llevan HTML de lo más común 
Globant Proprietary | Confidential Information 
Versatilidad 
Potente motor de expresiones flexibls 
Extensible 
Agregar componentes especializados nunca fue más fácil 
View
Conocé tus superpoderes 
Simple 
Conocé tus superpoderes | Dependency Injection 
Simplicidad para seleccionar componentes 
Globant Proprietary | Confidential Information 
Modularizable 
Todo se puede transformar en una depedencia inyectable 
Mantenible 
No más metodos main() que resultan ser tu peor pesadilla 
Dependency 
Injection
Tomando el control 
“Lo esencial es invisible a los ojos.” 
Globant Proprietary | Confidential Information 
«Le pettit prince», Antoine de Saint-Exupéry
Tomando el control 
<!doctype html> 
<html ng-app> 
<head> 
<script src="js/angularjs-1.2.0.js"></script> 
<script src="todo.js"></script> 
<link rel="stylesheet" href="todo.css"> 
</head> 
<body> 
<!-- We have some hidden awesomeness here --> 
</body> 
</html> 
Globant Proprietary | Confidential Information
Tomando el control 
<!doctype html> 
<html ng-app> 
<head> 
<script src="js/angularjs-1.2.0.js"></script> 
<script src="todo.js"></script> 
<link rel="stylesheet" href="todo.css"> 
</head> 
<body> 
<!-- We have some hidden awesomeness here --> 
</body> 
</html> 
Globant Proprietary | Confidential Information
Tomando el control 
<body> 
<h2>Todo</h2> 
<div ng-controller="TodoCtrl"> 
<span>{{remaining()}} of {{todos.length}} remaining</span> 
[ <a href="" ng-click="archive()">archive</a> ] 
<ul class="unstyled"> 
<li ng-repeat="todo in todos"> 
<input type="checkbox" ng-model="todo.done"> 
<span class="done-{{todo.done}}">{{todo.text}}</span> 
</li> 
</ul> 
<form ng-submit="addTodo()"> 
<input type="text" ng-model="todoText" size="30" 
placeholder="add new todo here"> 
<input class="btn-primary" type="submit" value="add"> 
</form> 
</div> 
</body> 
Globant Proprietary | Confidential Information
Tomando el control 
<body> 
<h2>Todo</h2> 
<div ng-controller="TodoCtrl"> 
<span>{{remaining()}} of {{todos.length}} remaining</span> 
[ <a href="" ng-click="archive()">archive</a> ] 
<ul class="unstyled"> 
<li ng-repeat="todo in todos"> 
<input type="checkbox" ng-model="todo.done"> 
<span class="done-{{todo.done}}">{{todo.text}}</span> 
</li> 
</ul> 
<form ng-submit="addTodo()"> 
<input type="text" ng-model="todoText" size="30" 
placeholder="add new todo here"> 
<input class="btn-primary" type="submit" value="add"> 
</form> 
</div> 
</body> 
Globant Proprietary | Confidential Information
Tomando el control 
<body> 
<h2>Todo</h2> 
<div ng-controller="TodoCtrl"> 
<span>{{remaining()}} of {{todos.length}} remaining</span> 
[ <a href="" ng-click="archive()">archive</a> ] 
<ul class="unstyled"> 
<li ng-repeat="todo in todos"> 
<input type="checkbox" ng-model="todo.done"> 
<span class="done-{{todo.done}}">{{todo.text}}</span> 
</li> 
</ul> 
<form ng-submit="addTodo()"> 
<input type="text" ng-model="todoText" size="30" 
placeholder="add new todo here"> 
<input class="btn-primary" type="submit" value="add"> 
</form> 
</div> 
</body> 
Globant Proprietary | Confidential Information
Tomando el control 
<body> 
<h2>Todo</h2> 
<div ng-controller="TodoCtrl"> 
<span>{{remaining()}} of {{todos.length}} remaining</span> 
[ <a href="" ng-click="archive()">archive</a> ] 
<ul class="unstyled"> 
<li ng-repeat="todo in todos"> 
<input type="checkbox" ng-model="todo.done"> 
<span class="done-{{todo.done}}">{{todo.text}}</span> 
</li> 
</ul> 
<form ng-submit="addTodo()"> 
<input type="text" ng-model="todoText" size="30" 
placeholder="add new todo here"> 
<input class="btn-primary" type="submit" value="add"> 
</form> 
</div> 
</body> 
Globant Proprietary | Confidential Information
Tomando el control 
<body> 
<h2>Todo</h2> 
<div ng-controller="TodoCtrl"> 
<span>{{remaining()}} of {{todos.length}} remaining</span> 
[ <a href="" ng-click="archive()">archive</a> ] 
<ul class="unstyled"> 
<li ng-repeat="todo in todos"> 
<input type="checkbox" ng-model="todo.done"> 
<span class="done-{{todo.done}}">{{todo.text}}</span> 
</li> 
</ul> 
<form ng-submit="addTodo()"> 
<input type="text" ng-model="todoText" size="30" 
placeholder="add new todo here"> 
<input class="btn-primary" type="submit" value="add"> 
</form> 
</div> 
</body> 
Globant Proprietary | Confidential Information
Tomando el control 
<body> 
<h2>Todo</h2> 
<div ng-controller="TodoCtrl"> 
<span>{{remaining()}} of {{todos.length}} remaining</span> 
[ <a href="" ng-click="archive()">archive</a> ] 
<ul class="unstyled"> 
<li ng-repeat="todo in todos"> 
<input type="checkbox" ng-model="todo.done"> 
<span class="done-{{todo.done}}">{{todo.text}}</span> 
</li> 
</ul> 
<form ng-submit="addTodo()"> 
<input type="text" ng-model="todoText" size="30" 
placeholder="add new todo here"> 
<input class="btn-primary" type="submit" value="add"> 
</form> 
</div> 
</body> 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
Tomando el control 
angular.module('todos').controller('TodoCtrl', 
['$scope', 
function TodoCtrl($scope) { 
$scope.todos = [ 
{text:'learn angular', done:true}, 
{text:'build an angular app', done:false}]; 
$scope.addTodo = function() { 
$scope.todos.push({text:$scope.todoText, done:false}); 
$scope.todoText = ''; 
}; 
$scope.remaining = function() { 
var count = 0; 
angular.forEach($scope.todos, function(todo) { 
count += todo.done ? 0 : 1; 
}); 
return count; 
}; 
$scope.archive = function() { //More code }; 
}]); 
Globant Proprietary | Confidential Information
¡Aguzando la vista! 
Filters Routes 
Services Directives 
Globant Proprietary | Confidential Information
¡Aguzando la vista! 
Filters  Dan formato a una expresión 
Globant Proprietary | Confidential Information 
 Funcionan en controllers, views y services 
 Se pueden crear filtros custom 
 Ejemplos: 
 currency 
 date 
 lowercase 
 uppercase
¡Aguzando la vista! 
Services  Son singletons 
Globant Proprietary | Confidential Information 
 Deben cumplir una tarea especifica 
 Sirven como medio de comunicación entre controllers 
 Ejemplos: 
 $http 
 $location 
 $animation
¡Aguzando la vista! 
Globant Proprietary | Confidential Information 
 Es un servicio (ngRoute) 
 Enlaza views, controllers y urls 
 Maneja pasaje de parametros 
 Adicionalmente, ganamos deep-linking! 
 Ejemplos: 
$routeProvider.when('/Book/:bookId/ch/:chapterId', { 
templateUrl: 'chapter.html', 
controller: ChapterCntl 
}); 
Routes
¡Aguzando la vista! 
Directives  Son marcadores especiales dentro del DOM 
Globant Proprietary | Confidential Information 
 Pueden adoptar la forma de attributes, elements, css 
 Menejan el HTML compiler de AngularJS 
 Ejemplos: 
 <pane> 
 ng-click 
 ng-switch 
 ng-repeat
Una prueba de valor 
 Utiliza Karma Runner 
 Podemos usar cualquier testing framework (jasmine, chai, mocha) 
 Facilita inyectar dependencias y mock services 
 Unit tests y Tests End-to-End (E2E) 
Globant Proprietary | Confidential Information
Una prueba de valor 
Unit Tests Tests End-to-End (E2E) 
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'); 
Globant Proprietary | Confidential Information 
describe('Buzz Client', function() { 
it('should filter results', function() { 
input('user').enter('jacksparrow'); 
element(':button').click(); 
expect(repeater('ul li').count()).toEqual(10); 
input('filterText').enter('Bees'); 
expect(repeater('ul li').count()).toEqual(1); 
}); 
});
¡Al infinito y más allá! 
 Validation framework 
 AJAX support ($http & $resource) 
 Otros servicios ($apply, $digest, $watch y $q) 
Globant Proprietary | Confidential Information
Q&A
Thank You 
By yours truly 
@geronimogarcia 
DarkThrone 
geronimo.garcia@globant.com

Weitere ähnliche Inhalte

Was ist angesagt?

Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAnkit Agarwal
 
Callbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascriptCallbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascriptŁukasz Kużyński
 
Practical JavaScript Promises
Practical JavaScript PromisesPractical JavaScript Promises
Practical JavaScript PromisesAsa Kusuma
 
Asynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsAsynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsPiotr Pelczar
 
ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?장현 한
 
A (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project FilesA (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project FilesDavid Wengier
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptjnewmanux
 
Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web ModuleMorgan Cheng
 
How to send gzipped requests with boto3
How to send gzipped requests with boto3How to send gzipped requests with boto3
How to send gzipped requests with boto3Luciano Mammino
 
JSON Rules Language
JSON Rules LanguageJSON Rules Language
JSON Rules Languagegiurca
 
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineRaimonds Simanovskis
 
Angular Performance: Then, Now and the Future. Todd Motto
Angular Performance: Then, Now and the Future. Todd MottoAngular Performance: Then, Now and the Future. Todd Motto
Angular Performance: Then, Now and the Future. Todd MottoFuture Insights
 
$q and Promises in AngularJS
$q and Promises in AngularJS $q and Promises in AngularJS
$q and Promises in AngularJS a_sharif
 
Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performanceYehuda Katz
 

Was ist angesagt? (20)

AngularJs
AngularJsAngularJs
AngularJs
 
Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promises
 
Promise pattern
Promise patternPromise pattern
Promise pattern
 
AngularJS Basics with Example
AngularJS Basics with ExampleAngularJS Basics with Example
AngularJS Basics with Example
 
Callbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascriptCallbacks, promises, generators - asynchronous javascript
Callbacks, promises, generators - asynchronous javascript
 
Practical JavaScript Promises
Practical JavaScript PromisesPractical JavaScript Promises
Practical JavaScript Promises
 
Asynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsAsynchronous programming done right - Node.js
Asynchronous programming done right - Node.js
 
ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?ES6, 잘 쓰고 계시죠?
ES6, 잘 쓰고 계시죠?
 
A (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project FilesA (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project Files
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
 
Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web Module
 
How to send gzipped requests with boto3
How to send gzipped requests with boto3How to send gzipped requests with boto3
How to send gzipped requests with boto3
 
JSON Rules Language
JSON Rules LanguageJSON Rules Language
JSON Rules Language
 
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine
 
Angular Performance: Then, Now and the Future. Todd Motto
Angular Performance: Then, Now and the Future. Todd MottoAngular Performance: Then, Now and the Future. Todd Motto
Angular Performance: Then, Now and the Future. Todd Motto
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
Intro to Parse
Intro to ParseIntro to Parse
Intro to Parse
 
Promises, Promises
Promises, PromisesPromises, Promises
Promises, Promises
 
$q and Promises in AngularJS
$q and Promises in AngularJS $q and Promises in AngularJS
$q and Promises in AngularJS
 
Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performance
 

Andere mochten auch

Intro to tsql unit 14
Intro to tsql   unit 14Intro to tsql   unit 14
Intro to tsql unit 14Syed Asrarali
 
Employability deciding-planning and competing
Employability  deciding-planning and competingEmployability  deciding-planning and competing
Employability deciding-planning and competingGraduates Yorkshire
 
Wii目錄(中文版)
Wii目錄(中文版)Wii目錄(中文版)
Wii目錄(中文版)GameShop
 
GolinHarris 2013 Al's Day: Day of Service
GolinHarris 2013 Al's Day: Day of ServiceGolinHarris 2013 Al's Day: Day of Service
GolinHarris 2013 Al's Day: Day of ServiceGolin
 
Microsoft mobility tdm
Microsoft mobility tdmMicrosoft mobility tdm
Microsoft mobility tdmMustafa Kuğu
 
Building the Right Team to Insure Social Media Success
Building the Right Team to Insure Social Media SuccessBuilding the Right Team to Insure Social Media Success
Building the Right Team to Insure Social Media Successrashbaum
 
Toplines for all polling, National & Seven States
Toplines for all polling, National & Seven StatesToplines for all polling, National & Seven States
Toplines for all polling, National & Seven Statesstrengthensocialsecurity
 
Bt Egitim Presentation
Bt Egitim Presentation Bt Egitim Presentation
Bt Egitim Presentation Mustafa Kuğu
 
Pixels not papers
Pixels not papersPixels not papers
Pixels not paperscd3c
 
Octubre[1]
Octubre[1]Octubre[1]
Octubre[1]Anny pe?
 
Valuation - Requiring skills sets beyond academics
Valuation - Requiring skills sets beyond academicsValuation - Requiring skills sets beyond academics
Valuation - Requiring skills sets beyond academicsOurea Capital Advisors
 
Nadal 2012
Nadal 2012Nadal 2012
Nadal 2012XISCA
 
BlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésBlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésOpen Academy
 

Andere mochten auch (20)

Microsoft SQL 2014
Microsoft SQL 2014Microsoft SQL 2014
Microsoft SQL 2014
 
Intro to tsql unit 14
Intro to tsql   unit 14Intro to tsql   unit 14
Intro to tsql unit 14
 
강의자료6
강의자료6강의자료6
강의자료6
 
David
DavidDavid
David
 
Employability deciding-planning and competing
Employability  deciding-planning and competingEmployability  deciding-planning and competing
Employability deciding-planning and competing
 
Wii目錄(中文版)
Wii目錄(中文版)Wii目錄(中文版)
Wii目錄(中文版)
 
GolinHarris 2013 Al's Day: Day of Service
GolinHarris 2013 Al's Day: Day of ServiceGolinHarris 2013 Al's Day: Day of Service
GolinHarris 2013 Al's Day: Day of Service
 
Microsoft mobility tdm
Microsoft mobility tdmMicrosoft mobility tdm
Microsoft mobility tdm
 
Building the Right Team to Insure Social Media Success
Building the Right Team to Insure Social Media SuccessBuilding the Right Team to Insure Social Media Success
Building the Right Team to Insure Social Media Success
 
Toplines for all polling, National & Seven States
Toplines for all polling, National & Seven StatesToplines for all polling, National & Seven States
Toplines for all polling, National & Seven States
 
Bt Egitim Presentation
Bt Egitim Presentation Bt Egitim Presentation
Bt Egitim Presentation
 
MODXpo 2013 - Power to the enduser
MODXpo 2013 - Power to the enduserMODXpo 2013 - Power to the enduser
MODXpo 2013 - Power to the enduser
 
Pixels not papers
Pixels not papersPixels not papers
Pixels not papers
 
Skripnik
SkripnikSkripnik
Skripnik
 
Staffing event IT
Staffing event ITStaffing event IT
Staffing event IT
 
Octubre[1]
Octubre[1]Octubre[1]
Octubre[1]
 
Valuation - Requiring skills sets beyond academics
Valuation - Requiring skills sets beyond academicsValuation - Requiring skills sets beyond academics
Valuation - Requiring skills sets beyond academics
 
Learning through play
Learning through playLearning through play
Learning through play
 
Nadal 2012
Nadal 2012Nadal 2012
Nadal 2012
 
BlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésBlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztés
 

Ähnlich wie [AngularJS] From Angular to Mobile in 30 minutes

Controller in AngularJS
Controller in AngularJSController in AngularJS
Controller in AngularJSBrajesh Yadav
 
Angular js - 4developers 12 kwietnia 2013
Angular js - 4developers 12 kwietnia 2013Angular js - 4developers 12 kwietnia 2013
Angular js - 4developers 12 kwietnia 2013Marcin Wosinek
 
Client-side Rendering with AngularJS
Client-side Rendering with AngularJSClient-side Rendering with AngularJS
Client-side Rendering with AngularJSDavid Lapsley
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
Angular directive filter and routing
Angular directive filter and routingAngular directive filter and routing
Angular directive filter and routingjagriti srivastava
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesYekmer Simsek
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS DirectivesEyal Vardi
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS ArchitectureEyal Vardi
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS InternalEyal Vardi
 
Javascript Continues Integration in Jenkins with AngularJS
Javascript Continues Integration in Jenkins with AngularJSJavascript Continues Integration in Jenkins with AngularJS
Javascript Continues Integration in Jenkins with AngularJSLadislav Prskavec
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)Igor Bronovskyy
 
Ultimate Introduction To AngularJS
Ultimate Introduction To AngularJSUltimate Introduction To AngularJS
Ultimate Introduction To AngularJSJacopo Nardiello
 
AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014Dariusz Kalbarczyk
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenerytoddbr
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For BeginnersJonathan Wage
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPresswpnepal
 
OpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonOpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonPyCon Italia
 

Ähnlich wie [AngularJS] From Angular to Mobile in 30 minutes (20)

Introduction to angular js
Introduction to angular jsIntroduction to angular js
Introduction to angular js
 
Controller in AngularJS
Controller in AngularJSController in AngularJS
Controller in AngularJS
 
Angular js - 4developers 12 kwietnia 2013
Angular js - 4developers 12 kwietnia 2013Angular js - 4developers 12 kwietnia 2013
Angular js - 4developers 12 kwietnia 2013
 
Client-side Rendering with AngularJS
Client-side Rendering with AngularJSClient-side Rendering with AngularJS
Client-side Rendering with AngularJS
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Angular directive filter and routing
Angular directive filter and routingAngular directive filter and routing
Angular directive filter and routing
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
 
Angular Workshop_Sarajevo2
Angular Workshop_Sarajevo2Angular Workshop_Sarajevo2
Angular Workshop_Sarajevo2
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS Internal
 
Javascript Continues Integration in Jenkins with AngularJS
Javascript Continues Integration in Jenkins with AngularJSJavascript Continues Integration in Jenkins with AngularJS
Javascript Continues Integration in Jenkins with AngularJS
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Ultimate Introduction To AngularJS
Ultimate Introduction To AngularJSUltimate Introduction To AngularJS
Ultimate Introduction To AngularJS
 
AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPress
 
OpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonOpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con Python
 

Mehr von Globant

Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Globant
 
Google Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGoogle Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGlobant
 
Eventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualEventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualGlobant
 
Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Globant
 
Tech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaTech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaGlobant
 
Como impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceComo impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceGlobant
 
3D Programming Basics: WebGL
3D Programming Basics: WebGL3D Programming Basics: WebGL
3D Programming Basics: WebGLGlobant
 
Converge augmented report
Converge augmented reportConverge augmented report
Converge augmented reportGlobant
 
Sistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeSistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeGlobant
 
Kubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosKubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosGlobant
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueGlobant
 
Apache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónApache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónGlobant
 
Navegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosNavegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosGlobant
 
Converge 2020
Converge 2020 Converge 2020
Converge 2020 Globant
 
Converge 2020
Converge 2020Converge 2020
Converge 2020Globant
 
Tendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoTendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoGlobant
 
SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?Globant
 
Monitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónMonitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónGlobant
 
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?Globant
 
Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Globant
 

Mehr von Globant (20)

Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.
 
Google Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGoogle Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQL
 
Eventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualEventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtual
 
Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0
 
Tech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaTech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración Continua
 
Como impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceComo impulsar tu carrera Salesforce
Como impulsar tu carrera Salesforce
 
3D Programming Basics: WebGL
3D Programming Basics: WebGL3D Programming Basics: WebGL
3D Programming Basics: WebGL
 
Converge augmented report
Converge augmented reportConverge augmented report
Converge augmented report
 
Sistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeSistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta Lake
 
Kubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosKubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todos
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
 
Apache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónApache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisión
 
Navegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosNavegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financieros
 
Converge 2020
Converge 2020 Converge 2020
Converge 2020
 
Converge 2020
Converge 2020Converge 2020
Converge 2020
 
Tendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoTendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresado
 
SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?
 
Monitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónMonitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicación
 
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
 
Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)
 

Kürzlich hochgeladen

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Kürzlich hochgeladen (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

[AngularJS] From Angular to Mobile in 30 minutes

  • 2. ¡Quiero ser un superhéroe! “AngularJS is a toolset for building the framework most suited to your application development. It is fully extensible and Globant Proprietary | Confidential Information Angularjs.org works well with other libraries.”
  • 3. ¡Quiero ser un superhéroe! Globant Proprietary | Confidential Information
  • 4. ¡Quiero ser un superhéroe! Controller Injectable Testable Globant Proprietary | Confidential Information Data Binding POJO's Deep linking Form Validation Server Communication Directives Components Localization Embeddable
  • 5. Conocé tus superpoderes Globant Proprietary | Confidential Information $scope Controllers Views Dependency Injection
  • 6. Conocé tus superpoderes Modelo Conocé tus superpoderes | $scope POJO's (Plain Old JavaScript Object) $scope Globant Proprietary | Confidential Information Flexible No se rige por UAP (Uniform Access Principle) Nexo Puente de comunicación $rootScope
  • 7. Conocé tus superpoderes Comportamiento Conocé tus superpoderes | Comtroller Permite definir el comportamiento detras del DOM Globant Proprietary | Confidential Information Encapsulación Mantiene el orden de forma pristina y legible Expresividad Robusto pero sin la necesidad de boilerplate Controller
  • 8. Conocé tus superpoderes HTML Conocé tus superpoderes | View Las vistas llevan HTML de lo más común Globant Proprietary | Confidential Information Versatilidad Potente motor de expresiones flexibls Extensible Agregar componentes especializados nunca fue más fácil View
  • 9. Conocé tus superpoderes Simple Conocé tus superpoderes | Dependency Injection Simplicidad para seleccionar componentes Globant Proprietary | Confidential Information Modularizable Todo se puede transformar en una depedencia inyectable Mantenible No más metodos main() que resultan ser tu peor pesadilla Dependency Injection
  • 10. Tomando el control “Lo esencial es invisible a los ojos.” Globant Proprietary | Confidential Information «Le pettit prince», Antoine de Saint-Exupéry
  • 11. Tomando el control <!doctype html> <html ng-app> <head> <script src="js/angularjs-1.2.0.js"></script> <script src="todo.js"></script> <link rel="stylesheet" href="todo.css"> </head> <body> <!-- We have some hidden awesomeness here --> </body> </html> Globant Proprietary | Confidential Information
  • 12. Tomando el control <!doctype html> <html ng-app> <head> <script src="js/angularjs-1.2.0.js"></script> <script src="todo.js"></script> <link rel="stylesheet" href="todo.css"> </head> <body> <!-- We have some hidden awesomeness here --> </body> </html> Globant Proprietary | Confidential Information
  • 13. Tomando el control <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ] <ul class="unstyled"> <li ng-repeat="todo in todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="addTodo()"> <input type="text" ng-model="todoText" size="30" placeholder="add new todo here"> <input class="btn-primary" type="submit" value="add"> </form> </div> </body> Globant Proprietary | Confidential Information
  • 14. Tomando el control <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ] <ul class="unstyled"> <li ng-repeat="todo in todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="addTodo()"> <input type="text" ng-model="todoText" size="30" placeholder="add new todo here"> <input class="btn-primary" type="submit" value="add"> </form> </div> </body> Globant Proprietary | Confidential Information
  • 15. Tomando el control <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ] <ul class="unstyled"> <li ng-repeat="todo in todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="addTodo()"> <input type="text" ng-model="todoText" size="30" placeholder="add new todo here"> <input class="btn-primary" type="submit" value="add"> </form> </div> </body> Globant Proprietary | Confidential Information
  • 16. Tomando el control <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ] <ul class="unstyled"> <li ng-repeat="todo in todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="addTodo()"> <input type="text" ng-model="todoText" size="30" placeholder="add new todo here"> <input class="btn-primary" type="submit" value="add"> </form> </div> </body> Globant Proprietary | Confidential Information
  • 17. Tomando el control <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ] <ul class="unstyled"> <li ng-repeat="todo in todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="addTodo()"> <input type="text" ng-model="todoText" size="30" placeholder="add new todo here"> <input class="btn-primary" type="submit" value="add"> </form> </div> </body> Globant Proprietary | Confidential Information
  • 18. Tomando el control <body> <h2>Todo</h2> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ] <ul class="unstyled"> <li ng-repeat="todo in todos"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="addTodo()"> <input type="text" ng-model="todoText" size="30" placeholder="add new todo here"> <input class="btn-primary" type="submit" value="add"> </form> </div> </body> Globant Proprietary | Confidential Information
  • 19. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 20. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 21. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 22. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 23. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 24. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 25. Tomando el control angular.module('todos').controller('TodoCtrl', ['$scope', function TodoCtrl($scope) { $scope.todos = [ {text:'learn angular', done:true}, {text:'build an angular app', done:false}]; $scope.addTodo = function() { $scope.todos.push({text:$scope.todoText, done:false}); $scope.todoText = ''; }; $scope.remaining = function() { var count = 0; angular.forEach($scope.todos, function(todo) { count += todo.done ? 0 : 1; }); return count; }; $scope.archive = function() { //More code }; }]); Globant Proprietary | Confidential Information
  • 26. ¡Aguzando la vista! Filters Routes Services Directives Globant Proprietary | Confidential Information
  • 27. ¡Aguzando la vista! Filters  Dan formato a una expresión Globant Proprietary | Confidential Information  Funcionan en controllers, views y services  Se pueden crear filtros custom  Ejemplos:  currency  date  lowercase  uppercase
  • 28. ¡Aguzando la vista! Services  Son singletons Globant Proprietary | Confidential Information  Deben cumplir una tarea especifica  Sirven como medio de comunicación entre controllers  Ejemplos:  $http  $location  $animation
  • 29. ¡Aguzando la vista! Globant Proprietary | Confidential Information  Es un servicio (ngRoute)  Enlaza views, controllers y urls  Maneja pasaje de parametros  Adicionalmente, ganamos deep-linking!  Ejemplos: $routeProvider.when('/Book/:bookId/ch/:chapterId', { templateUrl: 'chapter.html', controller: ChapterCntl }); Routes
  • 30. ¡Aguzando la vista! Directives  Son marcadores especiales dentro del DOM Globant Proprietary | Confidential Information  Pueden adoptar la forma de attributes, elements, css  Menejan el HTML compiler de AngularJS  Ejemplos:  <pane>  ng-click  ng-switch  ng-repeat
  • 31. Una prueba de valor  Utiliza Karma Runner  Podemos usar cualquier testing framework (jasmine, chai, mocha)  Facilita inyectar dependencias y mock services  Unit tests y Tests End-to-End (E2E) Globant Proprietary | Confidential Information
  • 32. Una prueba de valor Unit Tests Tests End-to-End (E2E) 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'); Globant Proprietary | Confidential Information describe('Buzz Client', function() { it('should filter results', function() { input('user').enter('jacksparrow'); element(':button').click(); expect(repeater('ul li').count()).toEqual(10); input('filterText').enter('Bees'); expect(repeater('ul li').count()).toEqual(1); }); });
  • 33. ¡Al infinito y más allá!  Validation framework  AJAX support ($http & $resource)  Otros servicios ($apply, $digest, $watch y $q) Globant Proprietary | Confidential Information
  • 34. Q&A
  • 35. Thank You By yours truly @geronimogarcia DarkThrone geronimo.garcia@globant.com