AngularJS Bootstrap
La feuille de style préférée d'AngularJS est Twitter Bootstrap. Twitter Bootstrap est actuellement le framework front-end le plus populaire.
Bootstrap
Vous pouvez ajouter Twitter Bootstrap à votre application AngularJS. Vous pouvez ajouter le code suivant dans votre élément <head> :
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
Si le site est en Chine, il est recommandé d'utiliser le Bootstrap de la bibliothèque de ressources statiques de Baidu. Le code est le suivant :
<link rel="stylesheet" href="//apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css">
Voici un exemple HTML complet qui utilise les directives AngularJS et les classes Bootstrap.
Code HTML
<!DOCTYPE html>
<html>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<body ng-app="myApp" ng-controller="userCtrl">
<div class="container">
<h3>Utilisateurs</h3>
<table class="table table-striped">
<thead><tr>
<th>Modifier</th>
<th>Prénom</th>
<th>Nom</th>
</tr></thead>
<tbody><tr ng-repeat="user in users">
<td>
<button class="btn" ng-click="editUser(user.id)">
<span class="glyphicon glyphicon-pencil"></span> Modifier
</button>
</td>
<td>{{ user.fName }}</td>
<td>{{ user.lName }}</td>
</tr></tbody>
</table>
<hr>
<button class="btn btn-success" ng-click="editUser('new')">
<span class="glyphicon glyphicon-user"></span> Créer un nouvel utilisateur
</button>
<hr>
<h3 ng-show="edit">Créer un nouvel utilisateur :</h3>
<h3 ng-hide="edit">Modifier l'utilisateur :</h3>
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">Prénom :</label>
<div class="col-sm-10">
<input type="text" ng-model="fName" ng-disabled="!edit" placeholder="Prénom">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Nom :</label>
<div class="col-sm-10">
<input type="text" ng-model="lName" ng-disabled="!edit" placeholder="Nom">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Mot de passe :</label>
<div class="col-sm-10">
<input type="password" ng-model="passw1" placeholder="Mot de passe">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Répéter :</label⟧>
<div class="col-sm-10">
<type= type="password" ng-model="passw2" placeholder="Répéter le mot de passe">
</div>
</div>
</form>
<hr>
<button class="btn btn-success" ng-disabled="error || incomplete">
<span class="glyphicon glyphicon-save"></span> Enregistrer les modifications
</button>
</div>
<script src = "myUsers.js"></script>
</body>
</html>
<html>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<body ng-app="myApp" ng-controller="userCtrl">
<div class="container">
<h3>Utilisateurs</h3>
<table class="table table-striped">
<thead><tr>
<th>Modifier</th>
<th>Prénom</th>
<th>Nom</th>
</tr></thead>
<tbody><tr ng-repeat="user in users">
<td>
<button class="btn" ng-click="editUser(user.id)">
<span class="glyphicon glyphicon-pencil"></span> Modifier
</button>
</td>
<td>{{ user.fName }}</td>
<td>{{ user.lName }}</td>
</tr></tbody>
</table>
<hr>
<button class="btn btn-success" ng-click="editUser('new')">
<span class="glyphicon glyphicon-user"></span> Créer un nouvel utilisateur
</button>
<hr>
<h3 ng-show="edit">Créer un nouvel utilisateur :</h3>
<h3 ng-hide="edit">Modifier l'utilisateur :</h3>
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">Prénom :</label>
<div class="col-sm-10">
<input type="text" ng-model="fName" ng-disabled="!edit" placeholder="Prénom">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Nom :</label>
<div class="col-sm-10">
<input type="text" ng-model="lName" ng-disabled="!edit" placeholder="Nom">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Mot de passe :</label>
<div class="col-sm-10">
<input type="password" ng-model="passw1" placeholder="Mot de passe">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Répéter :</label⟧>
<div class="col-sm-10">
<type= type="password" ng-model="passw2" placeholder="Répéter le mot de passe">
</div>
</div>
</form>
<hr>
<button class="btn btn-success" ng-disabled="error || incomplete">
<span class="glyphicon glyphicon-save"></span> Enregistrer les modifications
</button>
</div>
<script src = "myUsers.js"></script>
</body>
</html>
Essayez-le »
Explication de la directive
| Directives AngularJS | Description |
|---|---|
| <html ng-app | Définir une application (non nommée) pour l'élément <html> |
| <body ng-controller | Définir un contrôleur pour l'élément <body> |
| <tr ng-repeat | Parcourir le tableau d’objets users, en plaçant chaque objet user dans un élément <tr>. |
| <button ng-click | Appeler la fonction editUser() lorsque l’élément <button> est cliqué |
| <h3 ng-show | Si edit = true, afficher l’élément <h3> |
| <h3 ng-hide | Si edit = true, masquer l’élément <h3> |
| <input ng-model | Lier l’élément <input> à l’application |
| <button ng-disabled | Si une erreur se produit ou si incomplete = true, désactiver l’élément <button> |
Explication de la classe Bootstrap
| Élément | Classes Bootstrap | Définition |
|---|---|---|
| <div> | container | Conteneur de contenu |
| <table> | table | Tableau |
| <table> | table-striped | Tableau avec fond rayé |
| <button> | btn | Bouton |
| <button> | btn-success | Bouton de succès |
| <span> | glyphicon | Glyphicon |
| <span> | glyphicon-pencil | Icône crayon |
| <span> | glyphicon-user | Icône utilisateur |
| <span> | glyphicon-save | Icône de sauvegarde |
| <form> | form-horizontal | Formulaire horizontal |
| <div> | form-group | Groupe de formulaire |
| <label> | control-label | Libellé de contrôle |
| <label> | col-sm-2 | Occupe 2 colonnes |
| <div> | col-sm-10 | Occupe 10 colonnes |
Code JavaScript
myUsers.js
angular.module('myApp', []).controller('userCtrl',
function($scope) {
$scope.fName = '';
$scope.lName = '';
$scope.passw1 = '';
$scope.passw2 = '';
$scope.users = [
{id:1, fName:'Hege', lName:"Pege" },
{id:2, fName:'Kim', lName:"Pim" },
{id:3, fName:'Sal', lName:"Smith" },
{id:4, fName:'Jack', lName:"Jones" },
{id:5, fName:'John', lName:"Doe" },
{id:6, fName:'Peter',lName:"Pan" }
];
$scope.edit = true;
$scope.error = false;
$scope.incomplete = false;
$scope.editUser = function(id) {
if (id == 'new') {
$scope.edit = true;
$scope.incomplete = true;
$scope.fName = '';
$scope.lName = '';
} else {
$scope.edit = false;
$scope.fName = $scope.users[id-1].fName;
$scope.lName = $scope.users[id-1].lName;
}
};
$scope.$watch('passw1',function() {$scope.test();});
$scope.$watch('passw2',function() {$scope.test();});
$scope.$watch('fName', function() {$scope.test();});
$scope.$watch('lName', function() {$scope.test();});
$scope.test = function() {
if ($scope.passw1 !== $scope.passw2) {
$scope.error = true;
} else {
$scope.error = false;
}
$scope.incomplete = false;
if ($scope.edit && (!$scope.fName.length ||
!$scope.lName.length ||
!$scope.passw1.length || !$scope.passw2.length)) {
$scope.incomplete = true;
}
};
});
$scope.fName = '';
$scope.lName = '';
$scope.passw1 = '';
$scope.passw2 = '';
$scope.users = [
{id:1, fName:'Hege', lName:"Pege" },
{id:2, fName:'Kim', lName:"Pim" },
{id:3, fName:'Sal', lName:"Smith" },
{id:4, fName:'Jack', lName:"Jones" },
{id:5, fName:'John', lName:"Doe" },
{id:6, fName:'Peter',lName:"Pan" }
];
$scope.edit = true;
$scope.error = false;
$scope.incomplete = false;
$scope.editUser = function(id) {
if (id == 'new') {
$scope.edit = true;
$scope.incomplete = true;
$scope.fName = '';
$scope.lName = '';
} else {
$scope.edit = false;
$scope.fName = $scope.users[id-1].fName;
$scope.lName = $scope.users[id-1].lName;
}
};
$scope.$watch('passw1',function() {$scope.test();});
$scope.$watch('passw2',function() {$scope.test();});
$scope.$watch('fName', function() {$scope.test();});
$scope.$watch('lName', function() {$scope.test();});
$scope.test = function() {
if ($scope.passw1 !== $scope.passw2) {
$scope.error = true;
} else {
$scope.error = false;
}
$scope.incomplete = false;
if ($scope.edit && (!$scope.fName.length ||
!$scope.lName.length ||
!$scope.passw1.length || !$scope.passw2.length)) {
$scope.incomplete = true;
}
};
});
Explication du code JavaScript
| Propriétés du scope | Objectif |
|---|---|
| $scope.fName | Variable du modèle (nom d'utilisateur) |
| $scope.lName | Variable du modèle (nom de famille de l'utilisateur) |
| $scope.passw1 | Variable du modèle (mot de passe de l'utilisateur 1) |
| $scope.passw2 | Variable du modèle (mot de passe de l'utilisateur 2) |
| $scope.users | Variable du modèle (tableau d'utilisateurs) |
| $scope.edit | Défini sur true lorsque l'utilisateur clique sur Créer un utilisateur. |
| $scope.error | Si passw1 n'est pas égal à passw2, défini sur true. |
| $scope.incomplete | Si un champ est vide (length = 0), mettre à true. |
| $scope.editUser | Définir les variables du modèle |
| $scope.watch | Surveiller les variables du modèle |
| $scope.test | Valider les variables du modèle pour les erreurs et la complétude. |