Étant donné un JSON comme ceci:
{
"name": "john"
"colours": [{"id": 1, "name": "green"},{"id": 2, "name": "blue"}]
}
et deux entrées HTML normales:
<input type="text" name="name" />
<input type="text" name="color" />
<input type="submit" value="submit" />
J'ai besoin de construire une table avec toutes les variations possibles, ex:
John green
John blue
Cela signifie que si un utilisateur continue à ajouter des valeurs via les entrées, de nouvelles lignes apparaissent, générant les nouvelles variations, par exemple:
Je dois également disposer de l'identifiant pour le gérer, et lorsque j'ajoute de nouvelles valeurs à l'aide des entrées, par exemple: "Peter" "Black", je dois remplir automatiquement l'identifiant (id de couleur) comme une incrémentation automatique. mysql, aboutissant à quelque chose comme ceci:
{
"colours": […...{"id": 3, "name": "black"}]
}
Est-ce possible? Quelles options ai-je pour le faire avec angular? Je pense toujours de la manière jQuery et je voudrais le faire de manière angulaire.
J'ai jeté un œil à hg-repeat et je l'ai utilisé, mais je ne me suis pas demandé comment obtenir le résultat attendu. La seule chose qui me vint à l'esprit était d'utiliser des répétitions imbriquées, mais cela n'a pas fonctionné.
Merci beaucoup d'avance,
Guillermo
Choc tylko podzielić siê z tym, co y pory pory wykorzystałem, aby zaoszczędzić Twój czas.
À la une nagłówków zakodowanych na stałe i nagłówków dynamicznych (w przypadku, gdy nie zależy na strukturze danych). W obu przypadkach napisałem prostą dyrektywę: customSort
name__
customSort
.directive("customSort", function() {
return {
restrict: 'A',
transclude: true,
scope: {
order: '=',
sort: '='
},
template :
' <a ng-click="sort_by(order)" style="color: #555555;">'+
' <span ng-transclude></span>'+
' <i ng-class="selectedCls(order)"></i>'+
'</a>',
link: function(scope) {
// change sorting order
scope.sort_by = function(newSortingOrder) {
var sort = scope.sort;
if (sort.sortingOrder == newSortingOrder){
sort.reverse = !sort.reverse;
}
sort.sortingOrder = newSortingOrder;
};
scope.selectedCls = function(column) {
if(column == scope.sort.sortingOrder){
return ('icon-chevron-' + ((scope.sort.reverse) ? 'down' : 'up'));
}
else{
return'icon-sort'
}
};
}// end link
}
});
Uyłem singla ng-repeat
Dobry przykład Fiddle ( Uwaga, nie ma biblioteki jQuery! )
<tbody>
<tr ng-repeat="item in pagedItems[currentPage] | orderBy:sortingOrder:reverse">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.description}}</td>
<td>{{item.field3}}</td>
<td>{{item.field4}}</td>
<td>{{item.field5}}</td>
</tr>
</tbody>
Démo 2: Fiddle
HTML
<table class="table table-striped table-condensed table-hover">
<thead>
<tr>
<th ng-repeat="header in table_headers"
class="{{header.name}}" custom-sort order="header.name" sort="sort"
>{{ header.name }}
</th>
</tr>
</thead>
<tfoot>
<td colspan="6">
<div class="pagination pull-right">
<ul>
<li ng-class="{disabled: currentPage == 0}">
<a href ng-click="prevPage()">« Prev</a>
</li>
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
ng-class="{active: n == currentPage}"
ng-click="setPage()">
<a href ng-bind="n + 1">1</a>
</li>
<li ng-class="{disabled: (currentPage) == pagedItems.length - 1}">
<a href ng-click="nextPage()">Next »</a>
</li>
</ul>
</div>
</td>
</tfoot>
<pre>pagedItems.length: {{pagedItems.length|json}}</pre>
<pre>currentPage: {{currentPage|json}}</pre>
<pre>currentPage: {{sort|json}}</pre>
<tbody>
<tr ng-repeat="item in pagedItems[currentPage] | orderBy:sort.sortingOrder:sort.reverse">
<td ng-repeat="val in item" ng-bind-html-unsafe="item[table_headers[$index].name]"></td>
</tr>
</tbody>
</table>
Na marginesie:
Kod ng-bind-html-unsafe
jest przestarzały, więc uyłem go tylko do Démo (drugi przykład). Zapraszamy do edycji.
En voici un exemple avec colonnes et lignes dynamiques avec angularJS: http://plnkr.co/edit/0fsRUp?p=preview
TGrid est une autre option que les gens ne trouvent généralement pas dans une recherche Google. Si les autres grilles que vous trouvez ne répondent pas à vos besoins, vous pouvez l'essayer, c'est gratuit
<table class="table table-striped table-condensed table-hover">
<thead>
<tr>
<th ng-repeat="header in headers | filter:headerFilter | orderBy:headerOrder" width="{{header.width}}">{{header.label}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="user in users" ng-class-odd="'trOdd'" ng-class-even="'trEven'" ng-dblclick="rowDoubleClicked(user)">
<td ng-repeat="(key,val) in user | orderBy:userOrder(key)">{{val}}</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
référez-vous https://Gist.github.com/ebellinger/4399082
Découvrez cette angular-table directive.
Tout d'abord, je voudrais remercier @ MaximShoustin.
Merci à toi j'ai vraiment belle table.
Je fournis une petite modification dans $scope.range
et $scope.setPage
.
De cette façon, j'ai maintenant la possibilité d'aller à la dernière page ou de revenir à la première page ..__ également lorsque je passe à la page suivante ou précédente, la navigation change lorsque $scope.gap
traverse. Et la page actuelle n'est pas toujours en première position. Pour moi, c'est plus joli.
Voici le nouvel exemple de violon: http://jsfiddle.net/qLBRZ/3/