Rossi Oddet

Blog d'un artisan développeur

Devoxx France 2013 # Tools in Action # Live Coding Avec Yeoman & AngularJS

Vous pouvez retrouvez la description de la session sur le site de Devoxx France.

Pourquoi j’ai choisi cette session ?

Yeoman bien qu’encore en version béta fait déjà beaucoup parlé de lui. Cette session va être, en ce qui me concerne, la 2nd fois qu’on aborde Yeoman dans la même journée (voir la session Frontend Live Coding).

Quand à Angular JS, il fait tant parler de lui et j’étais curieux de voir son intégration avec Yeoman.

Le présentateur

Matthieu Lux @swiip http://swiip.github.io/

Yeoman

La session commence par une présentation rapide de Yeoman.

En résumé, il s’agit d’un ensemble d’outils qui existaient déjà :

  • Yo - générateur
  • Bower - gestion des dépendances
  • Grunt - preview, build, test…

AngularJS

Il définit AngularJS comme un framework MVC apportant du “déclaratif” dans le modèle de programmation par opposition au modèle “impératif” du traditionnel Javascript ou de JQuery.

Démo

Pré-requis: avoir installé NodeJS.

Il faut ensuite installer Grunt, Bower, Yo, express et monk.

1
npm install -g yo grunt-cli bower express monk

Récupérer les trois fichiers “serveur” et copier les dans un répertoire. Ou encore faire un clone du dépôt.

Lancer la partie serveur :

1
node app.js

Etape 1 : Ajouter les dépendances JQuery et Bootstrap

Modifier le fichier component.json

1
2
3
4
5
6
7
8
9
{
  ...
  "dependencies": {
      ....
  "jquery" : "1.8.0",
  "bootstrap" : "2.3.1"
  }
  ...
}

Récupérer les dépendances

1
bower install

Ajouter dans le fichier index.html… Oui Bower ne le fait pas pour vous !

1
2
<script src="components/jquery/jquery.js"></script>
<script src="components/bootstrap/docs/assets/js/bootstrap.js"></script>

Etape 2 : Installer le générateur Angular et Karma

1
npm install generator-angular generator-karma

Les générateurs sont installés dans le répertoire node_modules.

Etape 3 : Générer un projet Angular

1
yo angular

Répondre Oui à toutes les questions.

Etape 4 : Installer les dépendances

1
npm install && bower install 

Etape 5 : Lancer l’application générée

1
grunt server

Etape 6 : Modifier app/scripts/app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'use strict';

angular.module('clientApp', ['ngResource'])
  .factory('Frameworks', function($resource) {
    return $resource('http://localhost\\:1234/frameworks', {
      id: '@_id'
    })
  })
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

Etape 7 : app/scripts/controller/main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
'use strict';

angular.module('clientApp')
  .controller('MainCtrl', function ($scope, Frameworks) {
    var modal = $('.modal');

    $scope.hello = 'Hello Devoxx !';

    $scope.frameworks = Frameworks.query();

    $scope.edit = function(framework) {
      $scope.framework = framework;
      modal.modal('show');
    }

    $scope.save = function() {
      if($scope.framework.$save) {
        $scope.framework.$save();
      } else {
        $scope.frameworks.push(Frameworks.save($scope.framework));
      }
      modal.modal('hide');
    }

    $scope.delete = function(framework, $event, $index) {
      framework.$delete();
      $event.stopPropagation();
      $scope.frameworks.splice($index, 1);
    }
  });

Etape 8 : app/views/main.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div class="hero-unit">
  <h1>{{hello}}</h1>
</div>

<table class="table table-striped table-bordered">
    <tr><th>Name</th><th>URL</th></tr>
    <tr ng-repeat="framework in frameworks" ng-click="edit(framework)">
        <td>{{framework.name}}</td>
        <td>{{framework.url}}</td>
        <td><button class="btn btn-danger" ng-click="delete(framework, $event, $index)">Delete</button> </td>
    </tr>
</table>

<button class="btn" ng-click="edit({})">Add</button>

<div class="modal hide fade">
    <div class="modal-header"><h2>Edit</h2></div>
    <div class="modal-body">
        <label>Name</label>
        <input type="text" ng-model="framework.name">
        <label>URL</label>
        <input type="text" ng-model="framework.url">
    </div>
    <div class="modal-footer">
        <button class="btn" ng-click="save()">Save</button>
    </div>
</div>
```

L’application développée

Le présentateur a durant la session appliqué des styles que vous pouvez retrouver ici

Les slides

Vous pouvez les télécharger ici.

Le code sur Github

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

Bilan

En somme, je retiens qu’AngularJS permet de faire plus de HTML et moins de javascript. C’est un framework complet qui intègre de nombreux services et peut se mettre aisément en oeuvre avec Yeoman.

Comments