
AngularJS
a brief intro
Quick Wins
Out of the box, Angular makes you productive.
Client Side MVC
- 
Model - Data that comes from your REST API. These are first class javascript objects.
 
- 
View - Just HTML, extended with Directives. 
 
- 
Controller - Fetches/sets data on your $scope. Queries the API. Provides client side validation.  Business logic. 
 
 2-Way Data Binding
Fundamental principal within Angular
// controller $scope.name = "Dave" $scope.setName = function() {   $scope.name = "John" }
// view, no DOM manipulation<p>{{name}}</p><button ng-click="setName()">Change name to John</button>
Client Side Routing
- Easy to use routing system.
 
- Handles wildcards.
 
     $routeProvider
      .when('/cars', {
        templateUrl: 'views/cars.html',
        controller: 'MainCtrl'
      })      .when('/cars/:carId, {        ...      })      .otherwise({
        redirectTo: '/'
      });
 
 Other Quick Wins
- Simple dependency injection. 
 
- 
Directives (custom declarative HTML extensions)
 
- 
Services/Factories - extracting application logic.
 
- 
Powerful filters for manipulating and displaying data.
 
- 
Plays nice with Promises.
 
- 
Super active, open source community.
 
- 
Entire framework is extremely unit test friendly. 
 
 
You will write less code.
"Thinking in Angular"
say what?
jQuery 
is imperative
<div id="loginButton" class="button login">Login</div>
Angular 
is declarative
<sidebar-button action="login" />
Don't manipulate the DOM. 
Manipulate your data instead. 
Let Angular's data binding do the DOM work for you. 
Controller
Imperative behavior
function MyCtrl ($scope) {  $scope.name = "Dave Ackerman";  $scope.setName = function(name) {    $scope.name = name;  }}
Scope
The glue
 $scope.name = "Dave Ackerman"
 
View
Declarative
<div ng-controller="MyCtrl">  Hello, {{name}}   <button ng-click="setName('John')">Set name to John</button></div>
Extract repeatable 
functionality and 
data into Services.
(will demo)
Let's write some stuff. 
- Get bootstrapped by understanding file structure.
 
- Use a built in Angular directive to display data.
 
- Add some basic functionality on top of this data.
 
- Understand Angular's basic routing system.
 
- Extract app data into a Factory.
 
- Write a very simple directive.