Cách tốt nhất để biểu diễn Grid hoặc Table trong AngularJS với Bootstrap 3? [đóng cửa]


284

Tôi đang tạo một Ứng dụng với AngularJS và Bootstrap 3. Tôi muốn hiển thị bảng / lưới có hàng ngàn hàng. Điều khiển tốt nhất có sẵn cho AngularJS & Bootstrap với các tính năng như Sắp xếp, Tìm kiếm, Phân trang, v.v.


6
Bạn chắc chắn nên xem ng-lưới ở đây: angular-ui.github.io/ng-grid
mainguy

1
Tại sao không sử dụng UI Bootstrap? Gần đây, nó đã được cập nhật để sử dụng Bootstrap 3: angular-ui.github.io/bootstrap
CallumVass

3
Hàng ngàn hàng đó không nên được gửi cho khách hàng. Do đó, một giải pháp JavaScript thuần túy sẽ không hoạt động tốt như vậy. Máy chủ sẽ cần thực hiện phân trang và / hoặc tìm kiếm cho bạn.
flup

Lần tới hãy thử bắn vào bảng ngTasty zizzamia.com/ng-tasty/directive/table dựa trên bảng css bootstrap :)
zizzamia

3
angular đang di chuyển vào " ui-lưới " sẽ có các tính năng bảng sẵn có. một thay thế tốt cho "dữ liệu jquery"
nhật ký

Câu trả lời:


223

Sau khi dùng thử ngGrid, ngTable, trNgGrid và Bảng thông minh , tôi đã đi đến kết luận rằng Bảng thông minh cho đến nay là triển khai tốt nhất AngularJS-khôn ngoan và Bootstrap-khôn ngoan. Nó được xây dựng chính xác giống như cách bạn xây dựng bảng ngây thơ của riêng mình bằng cách sử dụng góc chuẩn. Trên hết, họ đã thêm một vài chỉ thị giúp bạn thực hiện sắp xếp, lọc, v.v ... Cách tiếp cận của họ cũng làm cho việc mở rộng bản thân khá đơn giản. Việc họ sử dụng các thẻ html thông thường cho các bảng và lặp lại ng tiêu chuẩn cho các hàng và bootstrap tiêu chuẩn để định dạng làm cho điều này trở thành người chiến thắng rõ ràng của tôi.

Mã JS của họ phụ thuộc vào góc và html của bạn có thể phụ thuộc vào bootstrap nếu bạn muốn. Mã JS có tổng cộng 4 kb và bạn thậm chí có thể dễ dàng chọn những thứ ở ngoài đó nếu bạn muốn đạt được dấu chân thậm chí nhỏ hơn.

Trường hợp các lưới khác sẽ cung cấp cho bạn sợ bị giam cầm ở các khu vực khác nhau, Bảng thông minh chỉ cảm thấy mở và đi vào điểm chính.

Nếu bạn phụ thuộc nhiều vào chỉnh sửa nội tuyến và các tính năng nâng cao khác, bạn có thể bắt đầu và chạy nhanh hơn với ngTable chẳng hạn. Tuy nhiên, bạn có thể tự do thêm các tính năng như vậy khá dễ dàng trong Bảng thông minh.

Đừng bỏ lỡ Bảng thông minh !!!

Tôi không có liên quan đến Bảng thông minh, ngoại trừ việc tự sử dụng nó.


12
Chỉ cần tìm thấy một lỗi nhỏ trong Bảng thông minh, đã báo cáo và nó đã được sửa trong vài giờ. Tôi ngạc nhiên rằng không phải ai cũng sử dụng Bảng thông minh - nó tốt hơn rất nhiều so với tất cả những cái khác.
Ricky Helgesson

1
Bảng thông minh chắc chắn là sự lựa chọn tốt nhất cho AngularJS. Có nhiều tính năng hơn trong ngGrid, nhưng thật dễ dàng để thêm các tính năng đó bằng cách mở rộng Bảng thông minh.
Toilal

1
ng-lưới 3.0.7 hiện đã được phát hành và nó hoạt động tốt với tôi (bây giờ được gọi là ui-lưới)
Kimball Robinson

1
Vấn đề là: phân trang trên bảng thông minh thực sự xấu xí, không có trang đầu tiên, không có trang cuối cùng, phân trang ng-bảng thực sự tiện lợi hơn. Điều tương tự đối với việc sắp xếp, trên bàn thông minh, chúng tôi chỉ không biết rằng chúng tôi có thể sắp xếp trước khi nhấp, nó hoàn toàn không thuận tiện ...
amdev

1
Bảng thông minh cho các kịch bản chỉ đọc tầm thường, ui-lưới cho mọi thứ khác hoặc chỉ ui-lưới :)
RandomUs1r

116

Tôi có cùng yêu cầu và giải quyết nó bằng các thành phần sau:

Thành phần bảng ng-lưới có khả năng hiển thị hàng trăm hàng trong một lưới có thể cuộn. Nếu bạn phải đối phó với hàng ngàn mục, tốt hơn hết bạn nên sử dụng trình phân trang của ng-lưới. Các tài liệu của ng-lưới là tuyệt vời và chứa nhiều ví dụ. Sắp xếp và tìm kiếm được hỗ trợ ngay cả khi kết hợp với phân trang.

Đây là một ảnh chụp màn hình từ một dự án hiện tại để cho bạn một ấn tượng như thế nào:

nhập mô tả hình ảnh ở đây

[CẬP NHẬT tháng 7 năm 2017]

Sau khi có ng-lưới trong sản xuất trong một vài năm, tôi vẫn có thể nói rằng không có vấn đề lớn với thành phần này. Có, rất nhiều lỗi nhỏ, nhưng không có nút chặn hiển thị (ít nhất là trong các trường hợp sử dụng của tôi). Có nói rằng, tôi sẽ khuyên bạn không nên sử dụng thành phần này nếu bạn bắt đầu một dự án từ đầu. Thành phần này là một lựa chọn tốt nếu bạn đang bị ràng buộc để AngularJS 1.0.x . Nếu bạn có thể tự do chọn phiên bản Angular, hãy tìm một thành phần mới hơn. Một danh sách các thành phần bảng cho Angular 4 đã được Sam Deering biên soạn trong blog này .


2
Wijmo cũng cung cấp chỉ thị góc cùng với các tính năng như nhóm, phân loại vv Bạn cũng có thể kiểm tra các mẫu Benchmark cho ngGrid và Wijmo Lưới với AngularJS: demos.componentone.com/wijmo/Angular/GridBenchmark/...
Ashish

@Lars Behnke Làm cách nào để áp dụng kiểu bảng Bootstrap cho ng-lưới? Theo như tôi đã xem, ng-lưới không sử dụng thẻ tr bảng mà Bootstrap css dựa vào.
elpddev

Việc thực hiện thành phần ng-lưới không dựa trên Bootstrap. Vì vậy, tôi đã tùy chỉnh ng-Grid.less để có được giao diện gần nhất có thể với các thành phần GUI bootstrap.
Lars Behnke

1
Lưới ng dự án đã được viết lại dưới dạng UI UI có sẵn tại ui-grid.info
mostar

2
Thống kê năm 2016 cho thấy plugin ng-bảng vẫn đang được yêu cầu: GitHub: A. ng-lưới: ~ 3500 cam kết, ~ 800 vấn đề. B. bảng thông minh: ~ 300 cam kết, ~ 40 vấn đề. C. ng-bảng: ~ 500 cam kết, ~ 200 vấn đề. Xu hướng của Google chỉ chứng minh ý tưởng tương tự bằng cách so sánh: "bảng thông minh góc cạnh", "lưới ui góc", "bảng ng góc". google.com/trends/ từ
Anton Lyhin

87

Với "hàng ngàn hàng", đặt cược tốt nhất của bạn rõ ràng sẽ là phân trang phía máy chủ. Khi tôi nhìn vào các tùy chọn bảng / lưới AngularJs khác nhau một lúc trước, có ba mục yêu thích rõ ràng:

Cả ba đều tốt, nhưng thực hiện khác nhau. Cái nào bạn chọn có thể sẽ dựa trên sở thích cá nhân hơn bất cứ thứ gì khác.

ng-lưới có lẽ được biết đến nhiều nhất do sự liên kết của nó với angular-ui, nhưng cá nhân tôi thích ng-bàn , tôi thực sự thích cách triển khai của họ và cách bạn sử dụng nó, và họ có tài liệu và ví dụ tuyệt vời có sẵn và tích cực được cải thiện.


7
Tôi rất vui khi thấy ai đó nhắc đến ng-bàn. Tôi cũng thích ng-bảng hơn ng-lưới vì nó có kiểu dáng tốt hơn, đặc biệt là trong chế độ chỉnh sửa.
Rob J

2
Nhảy vào bandwagon ngTable ở đây. Tôi đã đi với ng-lưới cho một dự án và nó khá khủng khiếp. Tôi đã đi với ng-lưới hoàn toàn vì nó liên kết với angular-ui và nó dường như hoạt động hơn một chút trên github. Tôi nghĩ rằng tôi sẽ trao đổi qua ngTable. Hy vọng nó sẽ không quá khó khăn.
Brett

10
Này, người mới với hệ sinh thái góc cạnh, ban đầu tôi đã cố gắng sử dụng ng-lưới do trang web "tốt hơn", nhưng nhanh chóng gặp vấn đề về kiểu dáng, do cấu trúc div lồng nhau sâu sắc của họ. Cho đến nay tôi thích ng-bàn hơn, vì nó thực sự sử dụng a table. Tôi chỉ có thể áp dụng lớp bảng bootstrap và nó hoạt động ...
Pierre Henry

1
Lưu ý mã và cách tiếp cận của thông minh bảng đã hoàn toàn thay đổi với phiên bản v1.0.0 của nó (tháng 8 năm 2014) vì vậy các ý kiến đóng góp trước ngày này không liên quan nữa
laurent

4
ng-bàn hầu như không hoạt động vì nó được duy trì bởi một người duy nhất ở Ukraine và đã có rất nhiều vấn đề khác ở đó. ng-lưới đang được viết lại dưới dạng ui-lưới cho phiên bản 3.0 nhưng nó chưa sẵn sàng để sản xuất. Vì vậy, bây giờ nói chung không phải là thời điểm tốt để chọn hoặc chuyển đổi triển khai bảng Angular. Bảng thông minh cũng được duy trì bởi ít nhiều một người. Chúng tôi hiện đang sử dụng ng-bảng, nhưng chúng tôi dự định chuyển sang ui-lưới khi nó đáo hạn.
Splaktar

77

Một lưới Angular giàu tính năng là cái này:

trNgGrid

Một số tính năng của nó:

  • Được xây dựng với sự đơn giản trong tâm trí.
  • Đang sử dụng các bảng HTML đơn giản, cho phép các trình duyệt tối ưu hóa kết xuất.
  • Khai báo đầy đủ, duy trì sự tách biệt các mối quan tâm, do đó cho phép bạn mô tả đầy đủ về HTML, mà không làm hỏng bộ điều khiển của bạn.
  • Hoàn toàn có thể tùy chỉnh thông qua các mẫu và thuộc tính ràng buộc dữ liệu hai chiều.
  • Dễ bảo trì, có mã được viết bằng TypeScript.
  • Có một danh sách phụ thuộc rất ngắn: AngularJs và Bootstrap CSS, với các chủ đề Bootswatch tùy chọn.

trNgGrid

Thưởng thức. Vâng, tôi là tác giả. Tôi phát ngán với tất cả các lưới Angular ngoài kia.


5
Điều này cần một số công nhận hơn. Tôi bắt đầu với ngGrid. Tôi không thể tìm ra phiên bản nào tôi nên sử dụng vì tôi đoán tôi đã bắt đầu tìm kiếm giữa quá trình chuyển đổi từ 2.x sang 3.x của họ và tôi thậm chí không thể làm cho bảng hoạt động được. Sau đó, tôi chuyển đến ngTableloại công việc. Tôi không thể sắp xếp hoặc phân trang để hoạt động chính xác, nhưng đó là do cách tôi đang tải dữ liệu từ đó $http. Sau đó, tôi thấy điều này trNgGridvà tào lao thần thánh ... thật dễ dàng để đứng dậy và chạy. Ước gì tôi có thể viết nhiều hơn ở đây, nhưng tôi đề nghị mọi người hãy thử cái này trước!
Ronnie

2
Tôi hoàn toàn đồng ý với @Ronnie. Điều này nên được chú ý nhiều hơn. Sau cả ngày 'chiến đấu' với ng-lưới / ui-lưới để làm một cái gì đó phức tạp hơn một chút, tôi đã thử trNgGrid và thử làm việc đầu tiên.
Johnny Everson

4
có vẻ tốt, mặc dù không thể tìm thấy các mục quan trọng như tiêu đề cố định, cột có thể thay đổi kích thước, cột có thể kéo, v.v.
iLemming

bootstrap là một phụ thuộc cứng? Tôi muốn lưới của tôi sử dụng css tùy chỉnh. khả thi?
Jasdeep Singh

Điều này cần được công nhận nhiều hơn. Tôi đã rất gần với ng-lưới cho đến khi tôi nhận ra nó thậm chí không sử dụng bảng html.
ryanwinchester

39

Đối với bất cứ ai đọc bài đăng này: Làm cho mình một ưu tiên và tránh xa ng-lưới. Có rất nhiều lỗi (thực sự..tất cả các phần của lib đều bị hỏng theo cách nào đó), các nhà phát triển đã từ bỏ sự hỗ trợ của nhánh 2.0.x để hoạt động trong 3.0, điều này rất sẵn sàng. Tự khắc phục các sự cố không phải là một nhiệm vụ dễ dàng, mã ng-lưới không nhỏ và không đơn giản, trừ khi bạn có nhiều thời gian và kiến ​​thức sâu về góc và js nói chung, đây sẽ là một nhiệm vụ khó khăn.

Tóm lại: có đầy đủ các lỗi và phiên bản ổn định cuối cùng đã bị hủy bỏ.

Các github có đầy đủ các PR, nhưng chúng đang bị bỏ qua. Và nếu bạn báo cáo một lỗi trong nhánh 2.x, nó sẽ bị đóng.

Tôi biết là một proyect mã nguồn mở và những lời phàn nàn nghe có vẻ hơi lạc lõng, nhưng từ góc độ của một nhà phát triển đang tìm kiếm một thư viện, đó là ý kiến ​​của tôi. Tôi đã dành nhiều giờ làm việc với ng-lưới trong một proyect lớn và những cơn đau đầu không bao giờ kết thúc


Bạn có thể cho chúng tôi biết một vài ví dụ về những lỗi / kịch bản khiến bạn đau đầu không? Tôi quan tâm vì khi chọn một trong các tùy chọn nổi tiếng (ng-lưới, trNgGrid, ng-bảng, SmartTable) tôi chỉ bắt đầu với ng-lưới và sau khi đọc bài đăng của bạn và thấy 10 upvote tôi chỉ sợ!
thể thao

1
Vâng, một số trong số họ đã được sửa chữa tôi tin rằng, họ đã hợp nhất như 20 yêu cầu kéo đã ngồi ở đó trong nhiều tháng. Những vấn đề tôi đã có? nhiều người trong số họ là vì họ sử dụng div thay vì bàn để trang điểm dạng lưới. Ngoài ra các sự kiện mà lưới phơi bày là lỗi, điều đó gây ra cho tôi rất nhiều vấn đề bởi vì tôi đang thực hiện một hành vi giống như cuộn vô hạn, sự kiện cuộn đã bắn ngẫu nhiên trong một số tình huống không nên. Cột tự động chiều rộng hoàn toàn không hoạt động.
agusluc

Cuối cùng, nó sẽ phụ thuộc vào cách bạn muốn sử dụng lưới và mức độ tùy chỉnh cần thiết trong dự án của bạn. Kiểm tra github, đọc các vấn đề mở, xây dựng một số bản demo bao gồm tất cả các trường hợp sử dụng của bạn và xem nó hoạt động như thế nào. Nhưng hãy nhớ rằng, dev chi nhánh 2.x đã bị bỏ rơi, vì vậy bạn sẽ không có hỗ trợ trong tương lai.
agusluc

15

TrNgGrid đang hoạt động rất tốt cho đến nay. Dưới đây là những lý do tôi thích nó hơn ng-lưới và chuyển sang thành phần này

  • Nó tạo ra các thành phần bảng để có thể khởi động và sử dụng tất cả sức mạnh của bootstrap .css (ng-lưới sử dụng các chủ đề UI UI).

  • Đơn giản, tùy chọn lưới tài liệu tốt.

  • Kích thước máy chủ hoạt động


10

Ở cuối câu trả lời này cho câu hỏi về cách suy nghĩ trong Angular nếu bạn có nền tảng jQuery, bài đăng hàng đầu từ Josh David Miller tóm tắt:

Thậm chí không sử dụng jQuery. Thậm chí không bao gồm nó. Nó sẽ giữ bạn lại. Và khi bạn gặp phải một vấn đề mà bạn nghĩ rằng bạn đã biết cách giải quyết trong jQuery, trước khi bạn tiếp cận $, hãy thử nghĩ về cách thực hiện nó trong giới hạn của AngularJS. Nếu bạn không biết, hãy hỏi! 19 trong số 20 lần, cách tốt nhất để làm điều đó không cần jQuery và cố gắng giải quyết nó với kết quả jQuery mang lại nhiều công việc hơn cho bạn.

Bây giờ nếu bạn muốn một mạng lưới với vô số tính năng và tùy chọn để tùy chỉnh, jQuery DataTables là một trong những tính năng tốt nhất. Các lưới chỉ có góc mà tôi đã thấy không gần với những gì jQuery DataTables có thể làm.

Tuy nhiên , jQuery DataTables không tích hợp tốt với AngularJS. (Đã có nhiều nỗ lực khác nhau, nhưng không có sự tích hợp liền mạch nào.)

Có lẽ điều đó để lại một người có hai lựa chọn.

Đầu tiên là sử dụng lưới Angular thuần túy không có tính năng phong phú như DataTables. Tôi đồng ý với @Moonstom về việc chán ngấy các lưới Angular khác ngoài kia, và trNgGrid trông rất tuyệt.

Tùy chọn thứ hai là để nói: đây là một trong số 1 trường hợp hiếm hoi trong số 20 trường hợp bạn nên sử dụng jQuery và đi kèm với trình cắm thêm DataTables của jQuery, bởi vì những nỗ lực tái tạo lại bánh xe với các lưới Angular thuần túy đã mang lại một bánh xe ít mạnh mẽ hơn so với DataTables.

Sẽ thật tuyệt nếu nó khác, nhưng tôi chưa thấy hệ sinh thái Angular có lưới mạnh như jQuery DataTables, và nó không phải là một mạng dữ liệu tốt là một ứng dụng tốt trong ứng dụng web : một lưới tốt là một điều cần thiết.


+1 Thật vậy. Một sự xấu hổ khi DataTables chưa được tích hợp; có lẽ chỉ quá chặt chẽ với DOM.
CSSian


9

Bạn có thể sử dụng 3 lớp bootstrap và xây dựng bảng bằng chỉ thị ng-repeat

Thí dụ:

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>

ví dụ trực tiếp: http://jsfiddle.net/choroshin/5YDJW/5/

Cập nhật:

hoặc bạn luôn có thể thử ng-lưới phổ biến , ng-lưới rất tốt cho việc sắp xếp, tìm kiếm, nhóm, v.v., nhưng tôi chưa thử nghiệm nó trên dữ liệu quy mô lớn.


7
Đúng, đó là cách tiêu chuẩn để tạo bảng mà không cần sắp xếp, phân trang, lọc, tải lại ajax, v.v. trong Angular. Nhưng với hàng ngàn hàng, điều này sẽ khiến bất kỳ ứng dụng nào bị đình trệ.
mainguy

Điều này sẽ dẫn đến một giao diện người dùng rất lag.
boi_echos 27/2/2015

8

Dây đeo thích ứng . Đây là câu đố .

Nó rất nhẹ và có chiều cao hàng năng động.

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

Có thể thay đổi chiều rộng của cột?
Tomasz Waszchot

4

Như đã đề cập trong các câu trả lời khác: Đối với một bảng có tìm kiếm, chọn và phân trang " ng-lưới " là các tùy chọn tốt nhất. Một vài điều tôi đã đi qua tôi sẽ đề cập đến những điều có thể hữu ích trong khi thực hiện:

Để đặt env:

  1. http://www.json-generator.com/ để tạo dữ liệu JSON. Đây là một công cụ khá tuyệt vời để thiết lập dữ liệu mẫu của bạn để giúp phát triển nhanh hơn.

  2. Bạn có thể kiểm tra plunker này để thực hiện. Tôi đã sửa đổi để bao gồm: tìm kiếm, chọn và phân trang http://plnkr.co/edit/gJPBz0pVxGzKlI8MGOit?p=preview

Bạn có thể kiểm tra hướng dẫn này về Bảng thông minh, Cung cấp tất cả thông tin bạn cần: http://lorenzofox3.github.io/smart-table-website/

Sau đó, câu hỏi tiếp theo là bootstrap 3: Nó không chính xác nhưng mẫu này có vẻ tốt. - Bạn chỉ có thể sử dụng https://github.com/angular-ui/bootstrap/tree/master/template tất cả các mẫu được viết tốt.

Tôi có thể tiếp tục về cách chuyển đổi bootstrap 3 thành angularjs nhưng nó đã được đề cập trong các liên kết sau:

xin lưu ý rằng liên quan đến bảng thông minh, bạn phải kiểm tra xem nó đã sẵn sàng cho phiên bản góc cạnh của bạn chưa


3

Lưới Kendo là tốt như Wijmo. Tôi biết Kendo đi kèm với các ràng buộc Angular cho nguồn dữ liệu của họ và tôi nghĩ Wijmo có một plugin Angular. Không phải là miễn phí mặc dù.


3
Tôi đã có một trải nghiệm khủng khiếp với KendoUI. Nó cồng kềnh đến nỗi nó chạy như một con chó và dường như bị hack cùng với các thành phần phức tạp hơn đến mức khó có thể không có các tính năng hoạt động mà không có sẵn "ngoài hộp". Nó cũng được thiết kế để làm việc với các thành phần máy chủ của họ và được ghi chép rất kém cho các trường hợp cạnh. Tôi sẽ tránh xa họ!
Chính xác
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.