Bootstrap 3 ile AngularJS'de bir Izgara veya Tablo temsil etmenin en iyi yolu? [kapalı]


284

AngularJS ve Bootstrap 3 ile bir uygulama oluşturuyorum. Binlerce satır içeren bir tablo / ızgara göstermek istiyorum. Sıralama, Arama, Sayfalandırma gibi özelliklere sahip AngularJS & Bootstrap için mevcut en iyi kontrol nedir?


6
Sen kesinlikle burada ng-grid bir göz sahip olmalıdır: angular-ui.github.io/ng-grid
Mainguy

1
Neden UI Bootstrap kullanmıyorsunuz? Son zamanlarda Bootstrap 3 kullanmak güncellendi var: angular-ui.github.io/bootstrap
CallumVass

3
Bu binlerce satırın tümü müşteriye gönderilmemelidir. Bu nedenle, saf bir JavaScript çözümü bu kadar iyi sonuç vermeyecektir. Sunucunun sayfalama ve / veya sizi araması gerekir.
FLUP

Bir dahaki sefere deneyin ngTasty tabloya denemek zizzamia.com/ng-tasty/directive/table o :) önyükleme css tabloya dayanıyor
zizzamia

3
açısal tablo özellikleri dahili olurdu " ui-grid " içine hareket ediyor . "jquery datatables" için iyi bir alternatif
diaryfolio

Yanıtlar:


223

NgGrid, ngTable, trNgGrid ve dışarı denedikten sonra Akıllı Tablo , bunu sonucuna vardık Akıllı Masa kadar iyi uygulama angularjs-bilge ve Bootstrap-bilge gereğidir. Standart açısal kullanarak kendi naif masanızı inşa ettiğiniz gibi inşa edilmiştir. Bunun üzerine, sıralama, filtreleme vb. Yapmanıza yardımcı olan birkaç direktif eklediler. Yaklaşımları da kendinizi genişletmenizi oldukça kolaylaştırıyor. Tablolar için normal html etiketlerini ve satırlar için standart ng-tekrarı ve biçimlendirme için standart önyükleme kullandıkları gerçeği bunu açık bir şekilde kazanmamı sağlıyor.

Onların JS kodu açısal bağlıdır ve isterseniz html bootstrap bağlı olabilir. JS kodu toplamda 4 kb'dir ve daha da küçük bir kaplama alanına ulaşmak istiyorsanız, oradan kolayca bir şeyler seçebilirsiniz.

Diğer ızgaraların size farklı alanlarda klostrofobi vereceği yerde, Akıllı Masa kendini açık ve noktaya hissettiriyor.

Satır içi düzenlemeye ve diğer gelişmiş özelliklere büyük ölçüde güveniyorsanız, örneğin ngTable ile daha hızlı çalışmaya başlayabilirsiniz. Ancak, Akıllı Tablo'da bu tür özellikleri kolayca ekleyebilirsiniz.

Smart Table kaçırmayın !!!

Smart Table ile kendim kullanmak dışında hiçbir ilişkim yok.


12
Smart Table'da küçük bir hata buldum, rapor ettiler ve birkaç saat içinde düzeltildi. Herkesin Akıllı Masa kullanmadığına şaşırıyorum - diğerlerinden çok daha iyi.
Ricky Helgesson

1
Akıllı Masa kesinlikle AngularJS için en iyi seçimdir. NgGrid'de daha fazla özellik var, ancak Smart Table'ı genişleterek bu özellikleri eklemek kolaydır.
Toilal

1
ng-grid 3.0.7 yayınlandı ve benim için iyi çalıştı (şimdi ui-grid olarak adlandırılıyor)
Kimball Robinson

1
Sorun şu: Akıllı masadaki sayfalandırma gerçekten çirkin, ilk sayfa yok, son sayfa yok, ng-masa sayfalaması gerçekten daha ergonomik. Sıralama için aynı şey, akıllı masada tıklanmadan önce sıralayabileceğimizi bilmiyoruz, hiç ergonomik değil ...
amdev

1
Önemsiz salt okunur senaryolar için Akıllı Tablo, diğer her şey için ui-grid veya sadece ui-grid :)
RandomUs1r

116

Aynı gereksinime sahiptim ve bu bileşenleri kullanarak çözdüm:

Tablo bileşeni ng-grid kaydırılabilir bir ızgarada yüzlerce satırı görüntüleyebilir. Binlerce girişle uğraşmak zorunda kalırsanız, ng-grid'in sayfalayıcısını kullanmak daha iyidir. Ng-grid dokümantasyonu mükemmel ve birçok örnek içeriyor. Sıralama ve arama, sayfalandırma ile birlikte desteklenir.

İşte size nasıl göründüğü hakkında bir izlenim vermek için mevcut bir projeden bir ekran görüntüsü:

resim açıklamasını buraya girin

[GÜNCELLEME Temmuz 2017]

Birkaç yıl boyunca üretimde ng-grid yaptıktan sonra, hala bu bileşenle ilgili önemli bir sorun olmadığını söyleyebilirim. Evet, küçük hatalar bol, ama hiçbir gösteri tıpalar (en azından benim kullanım durumlarda). Bunu söyledikten sonra, sıfırdan bir projeye başlarsanız bu bileşeni kullanmaya karşı şiddetle tavsiye ederim. Bu bileşen yalnızca AngularJS 1.0.x'e bağlıysanız iyi bir seçenektir . Açısal sürümü seçmekte özgürseniz, daha yeni bir bileşen seçin. Angular 4 için tablo bileşenlerinin bir listesi bu blogda Sam Deering tarafından derlenmiştir .


2
Wijmo da ayrıca angularjs ile ngGrid ve Wijmo Izgara için Benchmark örneği kontrol edebilir vb sıralama, gruplama gibi özellikleri ile birlikte Açısal Direktifleri sunar: demos.componentone.com/wijmo/Angular/GridBenchmark/...
Ashish

@Lars Behnke Bootstrap tablosu stilini ng-grid'e nasıl uygulayabilirim? Baktığım kadarıyla ng-grid, Bootstrap css'in güvendiği tablo tr etiketlerini kullanmıyor.
elpddev

Ng-grid bileşeninin uygulanması Bootstrap'i temel almaz. Bu yüzden önyükleme GUI öğelerine mümkün olduğunca yakın bir görünüm ve his elde etmek için ng-grid.less'i özelleştirdim.
Lars Behnke

1
Proje ng ızgara mevcuttur UI kılavuz olarak yeniden ediliyor olan ui-grid.info
mostar

2
2016 istatistikleri, ng-tables eklentisinin hala talep edildiğini gösteriyor: GitHub: A. ng-grid: ~ 3500 taahhüt, ~ 800 sayı. B. akıllı tablo: ~ 300 taahhüt, ~ 40 konular. C. ng-tablosu: ~ 500 taahhüt, ~ 200 sayı. Google eğilimleri, "açısal akıllı tablo", "açısal kullanıcı arayüzü tablosu", "açısal ng tablosu" ile karşılaştırarak aynı fikri kanıtlamaktadır. google.com/trends/…
Anton Lyhin

87

"Binlerce satır" ile en iyi bahis açıkçası sunucu tarafı sayfalama yapmak olacaktır. Bir süre farklı AngularJs tablo / ızgara seçenekleri içine baktığımda üç açık sık vardı:

Üçü de iyidir, ancak farklı şekilde uygulanır. Hangisini seçerseniz, muhtemelen her şeyden daha fazla kişisel tercihe dayalı olacaktır.

ng-grid muhtemelen en çok açısal-ui ile ilişkisi nedeniyle bilinir, ama kişisel olarak ng-tabloyu tercih ederim , uygulamalarını ve nasıl kullandığınızı gerçekten çok seviyorum ve mevcut harika belgelere ve örneklere sahipler ve aktif olarak geliştiriliyorlar.


7
Birisinin ng-table'dan bahsettiğini görmek beni çok mutlu etti. Ben de özellikle düzenleme modunda, daha iyi bir stil var ng-ızgara üzerinde ng-tablo tercih ederim.
Rob J

2
Burada ngTable bandwagonuna atlamak. Bir proje için ng-grid ile gittim ve oldukça korkunçtu. Sadece açısal-ui ile ilişkisi nedeniyle ng-grid ile gittim ve github'da biraz daha aktif gibi görünüyor. Sanırım ngTable'a geçeceğim. Umarım çok zor olmaz.
Brett

10
Hey, açısal ekosistemli acemi, başlangıçta "daha iyi" web sitesi nedeniyle ng-grid ile çalışmaya çalıştım, ancak derin iç içe div yapıları nedeniyle hızlı bir şekilde stil problemleriyle karşılaştım. Şimdiye kadar ng-table'ı daha çok seviyorum, çünkü aslında a kullanıyor table. Sadece bootstrap masa sınıfını uygulayabilirim ve işe yarıyor ...
Pierre Henry

1
Akıllı tablonun kod ve yaklaşımının v1.0.0 (Ağustos 2014) sürümü ile kökten değiştiğine dikkat edin, bu tarihten önce yapılan yorumlar artık geçerli değildir
laurent

4
ng-table, Ukrayna'da tek bir kişi tarafından idare edildiği için çoğunlukla uykuda kaldı ve orada başka birçok sorun var. ng-grid sürüm 3.0 için ui-grid olarak yeniden yazılıyor ancak üretime hazır değil. Dolayısıyla, Açısal tablo uygulamalarını seçmek veya değiştirmek için genellikle iyi bir zaman değil. Smart-Table, az çok tek bir kişi tarafından da korunur. Şu anda ng-table kullanıyoruz, ancak olgunlaştıkça ui-grid'e geçmeyi planlıyoruz.
Splaktar

77

Zengin özellikli açısal ızgara şudur:

trNgGrid

Bazı özellikleri:

  • Sadelik düşünülerek inşa edilmiştir.
  • Tarayıcıların oluşturmayı optimize etmesine izin veren düz HTML tabloları kullanıyor.
  • Tamamen bildirici, endişelerin ayrılmasını koruyarak, denetleyicilerinizi bozmadan HTML'de tam olarak tanımlamanızı sağlar.
  • Şablonlar ve iki yönlü veri bağlantılı özellikler aracılığıyla tamamen özelleştirilebilir.
  • Kodun TypeScript ile yazılmış olması, bakımı kolaydır.
  • Çok kısa bir bağımlılık listesine sahiptir: AngularJ'ler ve Bootstrap CSS, isteğe bağlı Bootswatch temaları.

trNgGrid

Zevk almak. Evet, ben yazarım. Orada tüm Açısal ızgaralardan bıktım.


5
Bunun biraz daha tanınması gerekiyor. İle başladım ngGrid. 2.x'ten 3.x'e geçişleri arasında aramaya başladığımı tahmin ettiğim için hangi sürümü kullanmam gerektiğini anlayamıyordum ve tabloyu çalıştıramadım bile. Sonra ngTablehangi işe yaradım. Doğru şekilde çalışmak için sıralama veya sayfalama alamadım, ancak veri yükleme yöntemimden kaynaklanıyor olabilir $http. Sonra bunu gördüm trNgGridve kutsal saçmalık ... kalkmak ve koşmak çok kolay. Burada daha fazla yazabilseydim, ama herkesin bunu önce denemesini öneriyorum!
Ronnie

2
@Ronnie'ye tamamen katılıyorum. Bu daha fazla dikkat edilmelidir. Bir gün biraz daha karmaşık bir şey yapmak için ng-grid / ui-grid ile 'kavga ettikten' sonra, trNgGrid'i denedim ve ilk denemede çalıştım.
Johnny Everson

4
iyi görünüyor, ancak sabit üstbilgi, yeniden boyutlandırılabilir sütunlar, sürüklenebilir sütunlar vb. gibi önemli öğeleri bulamıyorum
iLemming

Bootstrap zor bir bağımlılık mıdır? Izgaramın özel css kullanmasını istiyorum. mümkün?
Jasdeep Singh

Bunun daha fazla tanınması gerekiyor. Ben bile html tabloları kullanarak olmadığını fark kadar ng-grid ile gidiş yakındı.
ryanwinchester

39

Bu yazıyı okuyan herkes için: Kendinize bir iyilik yapın ve ng-grid'den uzak durun. Hatalarla dolu (gerçekten .. lib'in hemen hemen her kısmı bir şekilde kırılmış), devs, hazır olmaktan çok uzakta olan 3.0'da çalışmak için 2.0.x şubesinin desteğini terk etti. Sorunları kendiniz düzeltmek kolay bir iş değildir, ng-grid kodu küçük değildir ve çok fazla zamanınız ve genel olarak açısal ve js hakkında derin bir bilgi sahibi olmadıkça, zor bir görev olacaktır.

Alt satır: hatalarla dolu ve son kararlı sürüm terk edildi.

Github PR'larla doludur, ancak yok sayılmaktadır. Ve 2.x dalında bir hata bildirirseniz, kapatılır.

Açık kaynaklı bir proyect olduğunu biliyorum ve şikayetler biraz yerinde görünmeyebilir, ancak kütüphane arayan bir geliştiricinin bakış açısına göre, bu benim görüşüm. Büyük bir proyect içinde ng-grid ile çalışarak uzun saatler geçirdim ve headcaches asla bitmiyor


Bize baş ağrısı veren bu hataların / senaryoların birkaç örneğini söyleyebilir misiniz? Biliyorum çünkü iyi bilinen seçeneklerden birini seçerken (ng-grid, trNgGrid, ng-table, SmartTable) Ben sadece ng-grid ile başlıyorum ve yazınızı okuduktan ve 10 upvotes gördükten sonra sadece korktum!
spor

1
Peki, bazıları sabit inanıyorum, orada aylarca oturmuş 20 çekme isteği gibi birleşti. Sahip olduğum sorunlar? birçoğu ızgara makyajı için masa yerine div kullanıyorlardı. Ayrıca ızgaranın ortaya çıkardığı olaylar buggy, bana bir sürü sorun veriyor çünkü sonsuz kaydırma gibi bir davranış uyguluyordum, scroll olayı bazı durumlarda rastgele ateş etmemeliydi. Sütunların otomatik genişliği hiç çalışmıyor.
agusluc

Sonunda, ızgarayı nasıl kullanmak istediğinize ve projenizde gereken özelleştirme düzeyine bağlı olacaktır. Github'u kontrol edin, açık sorunları okuyun, tüm kullanım durumlarınızı kapsayan bir demo oluşturun ve nasıl çalıştığını görün. Ama unutmayın, 2.x şube geliştiricisi terk edildi, bu yüzden gelecekte sıfır desteğiniz olacak.
agusluc

15

TrNgGrid şu ana kadar harika çalışıyor. İşte ng-grid tercih ve bu bileşen taşındı nedenleri

  • Çizme izlenebilir ve bootstrap .css (ng-grid jQuery UI temalarını kullanır) tüm gücünü kullanmak için tablo öğeleri yapar.

  • Basit, iyi belgelenmiş ızgara seçenekleri.

  • Sunucu boyutu sayfalama işleri


10

Bir jQuery geçmişiniz varsa Angular'da nasıl düşünüleceği sorusunun bu cevabının sonunda, Josh David Miller'ın üst yazısı şöyle özetliyor:

JQuery bile kullanmayın. Ekleme bile. Seni geri tutacak. Ve zaten jQuery'de nasıl çözeceğinizi bildiğinizi düşündüğünüz bir soruna geldiğinizde, ulaşmadan önce $, AngularJS sınırları içinde nasıl yapılacağını düşünmeye çalışın. Eğer bilmiyorsan sor! 20 üzerinden 19 kez, bunu yapmanın en iyi yolu jQuery gerekmez ve jQuery ile çözmeye çalışmak sizin için daha fazla iş sonuçları sağlar.

Özelleştirme için tonlarca özellik ve seçenek içeren bir ızgara istiyorsanız, jQuery DataTables en iyilerinden biridir. Gördüğüm yalnızca Açısal ızgaralar, jQuery DataTables'ın yapabileceklerine yaklaşmıyor.

Ancak , jQuery DataTables, AngularJS ile iyi entegre olmaz. (Çeşitli çabalar olmuştur, ancak hiçbiri kesintisiz entegrasyon sunmamaktadır.)

Belki de bir insanı iki seçenekle bırakır.

Birincisi, DataTable'lar kadar zengin olmayan saf bir Açısal ızgara ile gitmektir. @Moonstom'a, diğer Açısal ızgaralardan bıkmak konusunda hemfikirim ve trNgGrid güzel görünüyor.

İkinci seçenek: bu, jQuery'yi kullanmanız ve jQuery DataTables eklentisiyle gitmeniz gereken 20 durumdan 1'inde nadir bulunanlardan biridir, çünkü tekerleği saf Açısal ızgaralarla yeniden icat etme çabaları DataTable'lardan daha az sağlam tekerlek.

Aksi olsaydı iyi olurdu, ama Açısal ekosistemin jQuery DataTables kadar güçlü bir ızgara oluşturduğunu görmedim ve iyi bir veri ızgarası bir web uygulamasında olması güzel bir şey değil gibi : iyi bir ızgara esastır.


+1 Çok doğru. DataTable'ların henüz entegre edilmediği bir utanç; belki de DOM ile çok sıkı bir şekilde birleşti.
CSSian


9

Ng-repeat yönergesini kullanarak bootstrap 3 sınıflarını kullanabilir ve bir tablo oluşturabilirsiniz

Misal:

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>

canlı örnek: http://jsfiddle.net/choroshin/5YDJW/5/

Güncelleme:

ya da her zaman popüler ng-grid deneyebilirsiniz , ng-grid sıralama, arama, gruplama vb için iyidir, ancak henüz büyük ölçekli veriler üzerinde test etmedim.


7
Evet, Angular'da sıralama, sayfalandırma, filtreleme, ajax raloading vb. Olmadan tablo oluşturmanın standart yolu budur. Ancak binlerce sıra ile bu, herhangi bir uygulamayı bir öğütme duruşuna getirecektir.
Mainguy

Bu çok gecikmeli bir kullanıcı arayüzüne yol açacaktır.
boi_echos

8

Adapt Kayışı . İşte keman .

Son derece hafiftir ve dinamik satır yüksekliklerine sahiptir.

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

Sütunların genişliğini değiştirmek mümkün müdür?
Tomasz Waszczyk

4

Diğer cevaplarda belirtildiği gibi: Arama içeren bir tablo için, seçim ve sayfalama " ng-grid " en iyi seçenektir. Karşılaştığım birkaç şey, uygularken faydalı olabileceklerinden bahsedeceğim:

Env'yi ayarlamak için:

  1. JSON verileri oluşturmak için http://www.json-generator.com/ . Geliştirmeyi daha hızlı hale getirmek için örnek veri kümenizi almak için oldukça güzel bir araçtır.

  2. Uygulamanız için bu dalma pistonunu kontrol edebilirsiniz. Dahil etmek için değiştirdim: arama, seçme ve sayfalandırma http://plnkr.co/edit/gJPBz0pVxGzKlI8MGOit?p=preview

Akıllı tablo hakkında bu öğreticiyi kontrol edebilirsiniz, ihtiyacınız olan tüm bilgileri verir: http://lorenzofox3.github.io/smart-table-website/

Sonra bir sonraki soru bootstrap 3: Tam olarak değil ama bu şablonlar iyi görünüyor. - Sadece tüm şablonlar iyi yazılmış https://github.com/angular-ui/bootstrap/tree/master/template kullanabilirsiniz .

Bootstrap 3'ün angularjs'e nasıl dönüştürüleceği hakkında devam edebilirim, ancak aşağıdaki bağlantılarda zaten belirtilmiştir:

akıllı tablo ile ilgili olarak açısal versiyonunuz için hazır olup olmadığını kontrol etmeniz gerektiğini lütfen unutmayın


3

Kendo ızgarası Wijmo kadar iyidir. Kendo'nun veri kaynağı için Açısal bağlamalar ile geldiğini biliyorum ve Wijmo'nun bir Açısal eklentisi olduğunu düşünüyorum. Ama ikisi de özgür değil.


3
KendoUI ile korkunç bir deneyim yaşadım. Öyle şişirilmiş ki, bir köpek gibi çalışıyor ve daha karmaşık bileşenler için birlikte hacklenmiş gibi görünüyor, tabiri caizse "kutudan çıkmış" olmayan özelliklerin çalışmasını sağlamak imkansız değilse bile zor. Ayrıca, sunucu bileşenleriyle çalışmak için yoğun bir şekilde tasarlanmıştır ve uç durumlar için çok kötü belgelenmiştir. Onlardan uzak dururdum!
Prekastik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.