Filtrer, trier et totaliser
avec AngularJS (avec w3.js)
Pour trier les colonnes, cliquez sur le nom de la colonne. (Recliquer pour modifier l'ordre du tri)
| N° extrait | Date | Montant | Solde | N° IBAN du tiers | Catégorie |
|---|---|---|---|---|---|
| {{x.a}} | {{x.b | date}} | {{x.c | currency}} | {{x.d | currency}} | {{x.e}} | {{x.f}} |
Pour n'afficher que les transactions liées à un compte tiers et leur montant total
tapez le début de son code IBAN : =>
Extrait du code HTML
<div class="article" data-ng-app="myApp" data-ng-controller="myCtrl">
<p class="note">
Pour trier les colonnes, cliquez sur le nom de la colonne. (Recliquer pour modifier
l'ordre du tri)
</p>
<table>
<tr style="background-color:orange; cursor:pointer;">
<th data-ng-click="sortBy('a')">
N° extrait <span class="sortorder" data-ng-show="propertyName === 'a'" data-ng-class=
"{reverse: reverse}"> </span>
</th>
<th data-ng-click="sortBy('b')" title="valeur ou d'exécution">
Date <span class="sortorder" data-ng-show="propertyName === 'b'" data-ng-class=
"{reverse: reverse}"> </span>
</th>
<th data-ng-click="sortBy('c')" title="Les montants négatifs sont précédés du signe -">
Montant <span class="sortorder" data-ng-show="propertyName === 'c'" data-ng-class=
"{reverse: reverse}"> </span>
</th>
<th data-ng-click="sortBy('d')">
Solde <span class="sortorder" data-ng-show="propertyName === 'd'" data-ng-class=
"{reverse: reverse}"> </span>
</th>
<th data-ng-click="sortBy('e')" title="ou prélevement de la banque">
N° IBAN du tiers<span class="sortorder" data-ng-show="propertyName === 'e'"
data-ng-class="{reverse: reverse}"> </span>
</th>
<th data-ng-click="sortBy('f')">
Catégorie <span class="sortorder" data-ng-show="propertyName === 'f'" data-ng-class=
"{reverse: reverse}"> </span>
</th>
</tr>
<tr data-ng-repeat=
"x in resultValue=(tab | filter:{'e':search}) | orderBy:propertyName:reverse" style=
"text-align:right;">
<td>
{{x.a}}
</td>
<td>
{{x.b | date}}
</td>
<td>
{{x.c | currency}}
</td>
<td>
{{x.d | currency}}
</td>
<td>
{{x.e}}
</td>
<td>
{{x.f}}
</td>
</tr>
</table>
<p>
Pour n'afficher que les transactions liées à un compte tiers et leur montant total<br />
tapez le début de son code IBAN : <input type="text" placeholder="BE..."
data-ng-model="search" /> => <output style=
"background-color:black;color:white"> {{resultValue | sumOfValue:'c' | currency}} </output>
</p>
<p class="centrer">
<button data-ng-click="restaurer()">Restaurer le tableau</button>
</p>
</div>
Code source JS
angular.module('myApp',[]).controller('myCtrl',["$scope", "$q", function($scope, $q) {
$scope.tab = [
{a:"2017-0044",b:"2017-05-08",c:-6,d:6370.16,e:"BE45000412456789",f:"Compte du gérant"},
{a:"2017-0045",b:"2017-05-01",c:-3,d:6367.16,e:"REDEVANCE MENSUELLE",f:"Frais bancaires"},
{a:"2017-0046",b:"2017-05-01",c:-0.74,d:6366.42,e:"FRAIS MENSUELS",f:"Frais bancaires"},
{a:"2017-0047",b:"2017-05-09",c:-70,d:6296.42,e:"BE45000412456789",f:"Compte du gérant"},
{a:"2017-0048",b:"2017-05-12",c:2031.09,d:8327.51,e:"BE44001130669876",f:"Vente"},
{a:"2017-0049",b:"2017-05-13",c:-1415.86,d:6911.65,e:"BE17270012344421",f:"Achat matériel"}
];
$scope.propertyName = 'a'; /* nom d'un champ = tri initial */
$scope.reverse = false; /* tri ascendant (du plus petit au plus grand) */
$scope.sortBy = function(propertyName) {
$scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;
$scope.propertyName = propertyName;
};
$scope.restaurer = function(){
$scope.search="";
};
}]).filter('sumOfValue', function() {
return function(data, key) {
var sum = 0;
angular.forEach(data, function(v, k) {
sum += parseFloat(v[key]);
});
return sum;
}
});