Angular JS Introduction

Preview:

Citation preview

Introduction to

About meFull-stack dev

@dhyegofernando

The beginning

http://web.archive.org/web/20050428014715/http://www.youtube.com/

2005

SPASingle Page Application

“AngularJS: a kind of HTML extension.”

D D D

Data-binding Dependency Injection Directives

Data-binding

$('#input-name').on('change', function() { $('#greeting-name').text(this.value);});

#input-name

#greeting-name

model

module bootstrap

template expression

<div ng-app> <div> <label>Name:</label> <input type="text" ng-model="yourName"> <hr> <h1>Hello {{yourName}}!</h1> </div></div>

Dependency Injection

controller bootstrap

<div ng-app="app" ng-controller="GreetingController"> <form ng-submit="greet()"> <input type="text" ng-model="name"> <button type="submit">Greet</button> </form></div>

module application

dependency injection

...service

3rd's module

service

angular.module('app', ['alerter']) .controller('GreetingController', function($scope, Alerter) { $scope.name = 'John Doe'; $scope.greet = function() { Alerter.show('Hello ' + $scope.name); }; });

angular.module('alerter', []) .factory('Alerter', function($window) { return { show: function(string) { $window.alert(string); } }; });

Directives

Tab Component

Non-semantic way

bootstrap

plugin element<div id="tab"> <ul class="tab-head"> <li><a href="#content-1">Title 1</a></li> <li><a href="#content-2">Title 2</a></li> <li><a href="#content-3">Title 3</a></li> </ul> <div id="content-1" class="tab-content"> <p>Content 1 goes here</p> </div> <div id="content-2" class="tab-content"> <p>Content 2 goes here</p> </div> <div id="content-3" class="tab-content"> <p>Content 3 goes here</p> </div></div>

$('#tab').tab();

Semantic waydirectives bootstrap

...

tab components

<tabset> <tab heading="Title 1"> <p>Content 1 goes here</p> </tab> <tab heading="Title 2"> <p>Content 2 goes here</p> </tab> <tab heading="Title 3"> <p>Content 3 goes here</p> </tab></tabset>

angular.module('tab') .directive('tabset', function() { // ... }) .directive('tab', function() { // ... });

Hello {{ world }}

load angular script

bootstrap application

set model

template

<!DOCTYPE html><html lang="en" ng-app><head> <meta charset="UTF-8"> <title>Hello World</title></head><body> <input type="text" ng-model="name"> <h1>Hello {{ name }}</h1> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script></body></html>

Some golden tips

Don't reinvent the wheel

...use 3rd's components✓ nice documentation

✓ great tests suit

✓ maintained

✓ best practices

where to find components?

http://ngmodules.org/

http://bower.io/

how to use components?

install the componentbower install --save angular-material

load the component scripts<link rel="stylesheet" href="angular-material.min.css" rel="stylesheet"><script src="angular-material.min.js"></script>

load the component moduleangular.module('app', ['ngMaterial']);

follow the style guide

https://github.com/johnpapa/angular-styleguide

write tests

http://karma-runner.github.io/

http://angular.github.io/protractor/

use generators

http://yeoman.io/

https://github.com/yeoman/generator-angular

putting it all together

https://github.com/dhyegofernando/shopping-list-app

Shopping list app

keep learning

https://docs.angularjs.org/api

with videos

https://www.youtube.com/user/angularjs/

https://egghead.io/

with blogs

http://www.johnpapa.net/

http://briantford.com/

http://toddmotto.com/

with books

AngularJS - Up & Running

https://www.ng-book.com/

with tools

http://ng-inspector.org/

https://github.com/angular/angularjs-batarang

and more...

Angular 2

https://angular.io/

https://angular.io/docs/js/latest/quickstart.html

Questions?

Now it's up to you

Thank you

@dhyegofernando