Il modo migliore per rappresentare una griglia o una tabella in AngularJS con Bootstrap 3? [chiuso]


284

Sto creando un'app con AngularJS e Bootstrap 3. Voglio mostrare una tabella / griglia con migliaia di righe. Qual è il miglior controllo disponibile per AngularJS e Bootstrap con funzionalità come Ordinamento, Ricerca, Impaginazione, ecc.


6
Dovresti assolutamente dare un'occhiata a ng-grid qui: angular-ui.github.io/ng-grid
mainguy

1
Perché non usare UI Bootstrap? Recentemente è stato aggiornato per utilizzare Bootstrap 3: angular-ui.github.io/bootstrap
CallumVass

3
Quelle migliaia di righe non dovrebbero essere tutte inviate al client. Pertanto una soluzione JavaScript pura non funzionerà così bene. Il server dovrà eseguire l'impaginazione e / o cercarti.
flup

La prossima volta prova a dare un colpo a ngTasty table zizzamia.com/ng-tasty/directive/table è basato su bootstrap css table :)
zizzamia,

3
angolare si sta spostando in " griglia a U " che incorporerebbe le caratteristiche della tabella. una buona alternativa ai "
database

Risposte:


223

Dopo aver provato ngGrid, ngTable, trNgGrid e Smart Table , sono giunto alla conclusione che Smart Table è di gran lunga la migliore implementazione AngularJS-saggio e Bootstrap-saggio. È costruito esattamente come faresti con il tuo tavolo ingenuo usando l'angolazione standard. Inoltre, hanno aggiunto alcune direttive che ti aiutano a fare lo smistamento, il filtraggio ecc. Il loro approccio rende anche abbastanza semplice estenderti. Il fatto che utilizzino i normali tag html per le tabelle e lo standard ng-repeat per le righe e il bootstrap standard per la formattazione rende questo il mio chiaro vincitore.

Il loro codice JS dipende da angolare e il tuo html può dipendere da bootstrap se vuoi. Il codice JS è di 4 kb in totale e puoi anche facilmente selezionare roba da lì se vuoi raggiungere un ingombro ancora più piccolo.

Laddove le altre griglie ti daranno la claustrofobia in diverse aree, Smart Table è semplicemente aperta e mirata.

Se ti affidi fortemente alla modifica in linea e ad altre funzionalità avanzate, ad esempio ngTable potresti iniziare a lavorare più velocemente. Tuttavia, sei libero di aggiungere tali funzionalità abbastanza facilmente in Smart Table.

Da non perdere Smart Table !!!

Non ho alcuna relazione con Smart Table, tranne che dall'usarlo da solo.


12
Ho appena trovato un piccolo bug in Smart Table, lo ha segnalato e risolto in poche ore. Sono sorpreso che non tutti stiano usando Smart Table - è molto meglio di tutti gli altri.
Ricky Helgesson,

1
Smart Table è sicuramente la scelta migliore per AngularJS. Ci sono più funzionalità in ngGrid, ma è facile aggiungerle estendendo Smart Table.
Toilal,

1
ng-grid 3.0.7 è ora rilasciato e ha funzionato bene per me (ora chiamato ui-grid)
Kimball Robinson,

1
Il problema è: l'impaginazione su smart table è davvero brutta, nessuna prima pagina, nessuna ultima pagina, l'impaginazione di ng-table è davvero più ergonomica. Stessa cosa per l'ordinamento, su smart-table non sappiamo che possiamo ordinare prima di fare clic, non è affatto ergonomico ...
amdev

1
Smart Table per banali scenari di sola lettura, ui-grid per tutto il resto o solo ui-grid :)
RandomUs1r

116

Avevo lo stesso requisito e l'ho risolto utilizzando questi componenti:

Il componente di tabella ng-grid è in grado di visualizzare centinaia di righe in una griglia scorrevole. Se hai a che fare con migliaia di voci, stai meglio usando il paginator di ng-grid. La documentazione di ng-grid è eccellente e contiene molti esempi. L'ordinamento e la ricerca sono supportati anche in combinazione con l'impaginazione.

Ecco uno screenshot di un progetto corrente per darti un'idea di come appare:

inserisci qui la descrizione dell'immagine

[AGGIORNAMENTO luglio 2017]

Dopo aver avuto ng-grid in produzione per un paio d'anni, posso ancora dire che non ci sono problemi importanti con questo componente. Sì, molti bug minori, ma nessun tappo per lo spettacolo (almeno nei miei casi d'uso). Detto questo, ti consiglio vivamente di non utilizzare questo componente se avvii un progetto da zero. Questo componente è una buona opzione solo se si sono tenuti a AngularJS 1.0.x . Se sei libero di scegliere la versione angolare, scegli un nuovo componente. Un elenco di componenti di tabella per Angular 4 è stato compilato da Sam Deering in questo blog .


2
Wijmo fornisce anche Direttive angolari insieme a funzioni come raggruppamento, ordinamento ecc. Puoi anche controllare l'esempio Benchmark per ngGrid e Wijmo Grid con AngularJS: demos.componentone.com/wijmo/Angular/GridBenchmark/…
Ashish

@Lars Behnke Come applicare lo stile della tabella Bootstrap a ng-grid? Per quanto ho visto, ng-grid non usa tag table tr su cui contare i css Bootstrap.
elpddev,

L'implementazione del componente ng-grid non si basa su Bootstrap. Quindi ho personalizzato ng-grid.less al fine di ottenere un aspetto quanto più vicino possibile agli elementi della GUI bootstrap.
Lars Behnke,

1
Il progetto ng-grid è stato riscritto come UI Grid, disponibile su ui-grid.info
mostar

2
Le statistiche del 2016 mostrano che il plug-in ng-tables è ancora richiesto: GitHub: A. ng-grid: ~ 3500 commit, ~ 800 problemi. B. tavolo intelligente: ~ 300 commit, ~ 40 numeri. C. ng-table: ~ 500 commit, ~ 200 numeri. Le tendenze di Google dimostrano la stessa idea confrontando: "angular smart table", "angular ui grid", "angular ng table". google.com/trends/…
Anton Lyhin,

87

Con "migliaia di righe" la soluzione migliore sarebbe ovviamente quella di effettuare il paging lato server. Quando ho esaminato le diverse opzioni di tabella / griglia di AngularJs qualche tempo fa c'erano tre chiari preferiti:

Tutti e tre sono buoni, ma implementati in modo diverso. Quale sceglierai sarà probabilmente più basato sulle preferenze personali di ogni altra cosa.

ng-grid è probabilmente il più noto a causa della sua associazione con angular-ui, ma personalmente preferisco ng-table , mi piace molto la loro implementazione e il modo in cui lo usi, e hanno una grande documentazione ed esempi disponibili e attivamente migliorati.


7
Mi ha fatto piacere vedere qualcuno menzionare ng-table. Anch'io preferisco ng-table rispetto a ng-grid in quanto ha uno stile migliore, specialmente in modalità di modifica.
Rob J

2
Saltando sul carro della band ngTable qui. Sono andato con ng-grid per un progetto ed è stato abbastanza terribile. Sono andato con ng-grid esclusivamente a causa della sua associazione con angular-ui e sembra essere un po 'più attivo su github. Penso che passerò a ngTable. Spero non sia troppo difficile.
Brett,

10
Ehi, novizio con l'ecosistema angolare, inizialmente ho provato ad andare con ng-grid a causa di un sito web "migliore", ma ho subito incontrato problemi di stile, a causa della loro struttura div profondamente annidata. Finora mi piace ng-table meglio, perché in realtà usa a table. Posso solo applicare la classe di tabella bootstrap e funziona ...
Pierre Henry

1
Nota che il codice e l'approccio di smart-table sono radicalmente cambiati con la sua versione v1.0.0 (agosto 2014), quindi i commenti fatti prima di questa data non sono più rilevanti
laurent

4
ng-table è rimasto in gran parte sospeso perché è gestito da una sola persona in Ucraina e ci sono state molte altre questioni laggiù. ng-grid è stato riscritto come ui-grid per la versione 3.0 ma non è pronto per la produzione. Quindi ora non è generalmente un buon momento per scegliere o cambiare le implementazioni della tabella angolare. Smart-Table è anche gestito da più o meno una sola persona. Attualmente stiamo utilizzando ng-table, ma prevediamo di passare alla UI-grid man mano che matura.
Splaktar,

77

Una griglia angolare ricca di funzionalità è questa:

trNgGrid

Alcune delle sue caratteristiche:

  • È stato costruito pensando alla semplicità.
  • Sta usando semplici tabelle HTML, consentendo ai browser di ottimizzare il rendering.
  • Completamente dichiarativo, preservando la separazione delle preoccupazioni, permettendoti così di descriverlo completamente in HTML, senza incasinare i tuoi controller.
  • È completamente personalizzabile tramite modelli e attributi associati a dati bidirezionali.
  • Facile da mantenere, con il codice scritto in TypeScript.
  • Ha un elenco molto breve di dipendenze: AngularJs e Bootstrap CSS, con temi Bootswatch opzionali.

trNgGrid

Godere. Sì, sono l'autore. Mi sono stufato di tutte le griglie angolari là fuori.


5
Questo ha bisogno di qualche riconoscimento in più. Ho iniziato con ngGrid. Non riuscivo a capire quale versione avrei dovuto usare poiché immagino di aver iniziato a cercare tra la loro transizione da 2.xa 3.x e non sono nemmeno riuscito a far funzionare la tabella. Poi sono passato a ngTablequale tipo di lavoro. Non riuscivo a far funzionare correttamente l'ordinamento o il paging, ma ciò dipendeva dal modo in cui caricavo i dati $http. Poi ho visto questa trNgGride merda santa ... così facile da alzare e correre. Vorrei poter scrivere di più qui, ma suggerisco a tutti di provarlo prima!
Ronnie,

2
Sono completamente d'accordo con @Ronnie. Questa dovrebbe essere la maggiore attenzione data. Dopo un'intera giornata 'combattuta' con ng-grid / ui-grid per fare qualcosa di un po 'più complesso, ho provato trNgGrid e ho lavorato al primo tentativo.
Johnny Everson,

4
sembra buono, anche se non riesce a trovare elementi cruciali come intestazione fissa, colonne ridimensionabili, colonne trascinabili, ecc.
iLemming,

bootstrap è una dipendenza forte? Vorrei che la mia griglia usasse i CSS personalizzati. possibile?
Jasdeep Singh,

Ciò richiede un maggiore riconoscimento. Ero così vicino ad andare con ng-grid fino a quando ho capito che non stava nemmeno usando le tabelle HTML.
Ryanwinchester,

39

Per chiunque legga questo post: fatevi un favore e state alla larga da ng-grid. È pieno di bug (davvero ... quasi ogni parte della lib è rotta in qualche modo), gli sviluppatori hanno abbandonato il supporto del ramo 2.0.x per funzionare in 3.0 che è molto lontano dall'essere pronto. Risolvere i problemi da soli non è un compito facile, il codice ng-grid non è piccolo e non è semplice, a meno che tu non abbia molto tempo e una profonda conoscenza di angolare e js in generale, sarà un compito difficile.

Bottom Line: è pieno di bug e l'ultima versione stabile è stata abbandonata.

Il github è pieno di PR, ma vengono ignorati. E se si segnala un bug nel ramo 2.x, viene chiuso.

So che è un progetto open source e le lamentele possono sembrare un po 'fuori posto, ma dal punto di vista di uno sviluppatore alla ricerca di una biblioteca, questa è la mia opinione. Ho trascorso molte ore a lavorare con ng-grid in un grande progetto e le emicranie non finiscono mai


Puoi raccontarci un paio di esempi di questi bug / scenari che ti hanno causato mal di testa? Sono interessato perché nella scelta di una delle opzioni ben note (ng-grid, trNgGrid, ng-table, SmartTable) sto appena iniziando con ng-grid e dopo aver letto il tuo post e visto i 10 voti ho appena avuto paura!
sport

1
Bene, alcuni di loro sono stati riparati, credo, si sono fusi come 20 richieste di pull che erano lì da mesi. I problemi che ho avuto? molti di loro sono stati causati dal fatto che usano div al posto del tavolo per il trucco della griglia. Anche gli eventi che la griglia espone sono buggy, il che mi dà molti problemi perché stavo implementando un comportamento a scorrimento infinito, l'evento scroll si è attivato casualmente in alcune situazioni che non dovrebbero. La larghezza automatica delle colonne non funziona affatto.
agusluc,

Alla fine, dipenderà da come si desidera utilizzare la griglia e dal livello di personalizzazione richiesto nel progetto. Controlla il github, leggi i problemi aperti, crea una demo che copra tutti i tuoi casi d'uso e vedi come funziona. Ma ricorda, lo sviluppo del ramo 2.x è stato abbandonato, quindi in futuro avrai zero supporto.
agusluc,

15

TrNgGrid sta funzionando alla grande finora. Ecco i motivi per cui preferisco ng-grid e spostato in questo componente

  • Rende gli elementi della tabella in modo che possa essere bootwatch e utilizzare tutta la potenza di bootstrap .css (ng-grid utilizza temi dell'interfaccia utente jQuery).

  • Opzioni di griglia semplici e ben documentate.

  • Il paging delle dimensioni del server funziona


10

Alla fine di questa risposta alla domanda su come pensare in angolare se si ha uno sfondo jQuery, il post in alto di Josh David Miller riassume:

Non usare nemmeno jQuery. Non includerlo nemmeno. Ti terrà indietro. E quando arrivate a un problema che pensate di sapere già come risolvere in jQuery, prima di raggiungere il $, provate a pensare a come farlo entro i confini di AngularJS. Se non lo sai, chiedi! 19 volte su 20, il modo migliore per farlo non ha bisogno di jQuery e provare a risolverlo con i risultati di jQuery richiede più lavoro per te.

Ora, se vuoi una griglia con tonnellate di funzionalità e opzioni per la personalizzazione, jQuery DataTables è uno dei migliori. Le griglie solo angolari che ho visto non si avvicinano a ciò che jQuery DataTables può fare.

Tuttavia , jQuery DataTables non si integra bene con AngularJS. (Ci sono stati vari sforzi, ma nessuno offre una perfetta integrazione.)

Forse questo lascia una persona con due opzioni.

Il primo è quello di utilizzare una griglia angolare pura che non sia così ricca di funzionalità come DataTables. Sono d'accordo con @Moonstom sul fatto che mi stufi delle altre griglie angolari là fuori, e trNgGrid sembra carino.

La seconda opzione è quella di dire: questo è uno di quei rari casi su 1 in cui dovresti usare jQuery e utilizzare il plug-in jQuery DataTables, perché gli sforzi per reinventare la ruota con le pure griglie angolari hanno prodotto un ruota meno robusta di DataTables.

Sarebbe bello se fosse diversamente, ma non ho visto l'ecosistema Angular creare una griglia così forte come jQuery DataTables, e non è come se una buona griglia di dati sia piacevole da avere in un'app Web : una buona griglia è essenziale.


+1 Così vero. Un peccato che DataTables non sia ancora stato integrato; forse troppo strettamente accoppiato al DOM.
CSSian,


9

È possibile utilizzare le classi bootstrap 3 e creare una tabella usando la direttiva ng-repeat

Esempio:

angular.module('App', []);

function ctrl($scope) {
    $scope.items = [
        ['A', 'B', 'C'],
        ['item1', 'item2', 'item3'],
        ['item4', 'item5', 'item6']
    ];
}
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="App">
  <div ng-controller="ctrl">
    
    
    <table class="table table-bordered">
      <thead>
        <tr>
          <th ng-repeat="itemA in items[0]">{{itemA}}</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td ng-repeat="itemB in items[1]">{{itemB}}</td>
        </tr>
        <tr>
          <td ng-repeat="itemC in items[2]">{{itemC}}</td>
        </tr>
      </tbody>
    </table>
    
    
  </div>
</div>

esempio live: http://jsfiddle.net/choroshin/5YDJW/5/

Aggiornare:

oppure puoi sempre provare la popolare ng-grid , ng-grid è buona per ordinare, cercare, raggruppare ecc., ma non l'ho ancora testato su dati su larga scala.


7
Sì, questo è il modo standard per creare una tabella senza ordinamento, impaginazione, filtro, ajax raloading, ecc. In Angolare. Ma con migliaia di file questo causerà l'interruzione di qualsiasi applicazione.
Mainguy,

Ciò si tradurrà in un'interfaccia utente molto ritardata.
boi_echos,

8

Adapt-Strap . Ecco il violino .

È estremamente leggero e ha altezze di fila dinamiche.

<ad-table-lite table-name="carsForSale"
               column-definition="carsTableColumnDefinition"
               local-data-source="models.carsForSale"
               page-sizes="[7, 20]">
</ad-table-lite>

È possibile cambiare la larghezza delle colonne?
Tomasz Waszczyk,

4

Come menzionato in altre risposte: per una tabella con ricerca, selezionare e impaginare " ng-grid " è la migliore opzione. Un paio di cose che ho riscontrato menzionerò che potrebbero essere utili durante l'implementazione:

Per impostare env:

  1. http://www.json-generator.com/ per generare dati JSON. È uno strumento piuttosto interessante per ottenere il tuo set di dati di esempio per velocizzare lo sviluppo.

  2. Puoi controllare questo plunker per la tua implementazione. Ho modificato per includere: ricerca, selezione e paginazione http://plnkr.co/edit/gJPBz0pVxGzKlI8MGOit?p=preview

Puoi controllare questo tutorial su Smart table, Fornisce tutte le informazioni di cui hai bisogno: http://lorenzofox3.github.io/smart-table-website/

Quindi la domanda successiva è bootstrap 3: non è esattamente, ma questo modello sembra buono. - Puoi semplicemente usare https://github.com/angular-ui/bootstrap/tree/master/template tutti i modelli sono ben scritti.

Posso continuare su come convertire bootstrap 3 in angularjs ma è già menzionato nei seguenti link:

si prega di notare che per quanto riguarda lo smart-table è necessario verificare se è pronto per la versione angolare


3

La griglia di Kendo è buona così come Wijmo. So che Kendo viene fornito con i collegamenti angolari per l'origine dati e penso che Wijmo abbia un plug-in angolare. Né sono gratuiti però.


3
Ho avuto una terribile esperienza con KendoUI. È così gonfio che gira come un cane e sembra essere così hackerato insieme per i componenti più complessi che è difficile se non impossibile far funzionare funzionalità che non sono disponibili "fuori dalla scatola" per così dire. È anche fortemente orientato al lavoro con i componenti del server e molto scarsamente documentato per casi limite. Starei lontano da loro!
Precastic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.