Bootstrap 3을 사용하여 AngularJS에서 그리드 또는 테이블을 나타내는 가장 좋은 방법은 무엇입니까? [닫은]


284

AngularJS와 Bootstrap 3을 사용하여 앱을 만들고 있습니다. 수천 행의 테이블 / 그리드를 보여주고 싶습니다. 정렬, 검색, 페이지 매김 등과 같은 기능으로 AngularJS 및 Bootstrap에 가장 적합한 제어 기능은 무엇입니까?


6
당신의 definetly 여기 겨 그리드를 살펴이 있어야합니다 angular-ui.github.io/ng-grid
mainguy

1
왜 UI Bootstrap을 사용하지 않습니까? 그것은 최근에 부트 스트랩 3을 사용하도록 업데이트되었다 : angular-ui.github.io/bootstrap
CallumVass

3
이러한 수천 개의 행을 모두 클라이언트로 보내서는 안됩니다. 따라서 순수한 JavaScript 솔루션은 그렇게 잘 작동하지 않습니다. 서버는 페이지 매김 및 / 또는 검색을 수행해야합니다.
flup

다음 번 시도는 ngTasty 테이블에 주사를 zizzamia.com/ng-tasty/directive/table 가 : 부트 스트랩 CSS의 테이블을 기반으로
zizzamia

3
angular는 테이블 기능이 내장 된 " ui-grid " 로 이동 합니다. "jquery datatables"에 대한 좋은 대안
diaryfolio

답변:


223

ngGrid, ngTable, trNgGrid 및 Smart Table을 시도한 후에 Smart Table 이 AngularJS와 Bootstrap에 가장 적합한 구현 이라는 결론에 도달했습니다 . 표준 각도를 사용하여 자신의 순진한 테이블을 만들 때와 동일한 방식으로 빌드됩니다. 또한 정렬, 필터링 등을 수행하는 데 도움이되는 몇 가지 지시문을 추가했습니다. 이러한 접근 방식을 사용하면 자신을 확장하는 것이 매우 간단합니다. 테이블에 일반 html 태그를 사용하고 행에 표준 ng-repeat를 사용하고 서식을 지정하기 위해 표준 부트 스트랩을 사용한다는 사실이 분명한 승자가되었습니다.

JS 코드는 각도에 따라 다르며 원하는 경우 html은 부트 스트랩에 의존 할 수 있습니다. JS 코드는 총 4KB이며 더 작은 설치 공간에 도달하려는 경우 쉽게 물건을 선택할 수 있습니다.

다른 그리드가 다른 영역에서 폐소 공포증을 유발할 수있는 곳에 Smart Table은 개방 된 느낌을줍니다.

인라인 편집 및 기타 고급 기능에 크게 의존하는 경우 예를 들어 ngTable을 사용하여 더 빨리 시작할 수 있습니다. 그러나 Smart Table에서 이러한 기능을 매우 쉽게 추가 할 수 있습니다.

스마트 테이블을 놓치지 마세요 !!!

스마트 테이블을 직접 사용하는 것 외에는 스마트 테이블과 관련이 없습니다.


12
Smart Table에서 작은 버그가 발견되어 몇 시간 내에 수정되었습니다. 모든 사람이 스마트 테이블을 사용하는 것은 아닙니다. 다른 모든 것보다 훨씬 낫습니다.
Ricky Helgesson

1
Smart Table은 AngularJS에 가장 적합한 선택입니다. ngGrid에는 더 많은 기능이 있지만 Smart Table을 확장하여 해당 기능을 쉽게 추가 할 수 있습니다.
Toilal

1
ng-grid 3.0.7이 출시되었으며, 그것은 나를 위해 잘 작동했습니다 (현재 ui-grid라고 함)
Kimball Robinson

1
문제는 : 스마트 테이블의 페이지 매김이 실제로 추악하고 첫 페이지가 없으며 마지막 페이지가 없으며 ng-table 페이지 매김이 실제로 더 인체 공학적입니다. 정렬을위한 같은 것, 스마트 테이블에서 우리는 클릭하기 전에 정렬 할 수 있다는 것을 알지 못합니다. 인체 공학적이지는 않습니다.
amdev

1
스마트 표는 사소한 읽기 전용 시나리오, 다른 모든 것들에 대한 UI 그리드, 아니면 그냥 UI 그리드 :
RandomUs1r

116

나는 동일한 요구 사항을 가지고 다음 구성 요소를 사용하여 해결했습니다.

테이블 구성 요소 ng-grid는 스크롤 가능한 그리드에 수백 개의 행을 표시 할 수 있습니다. 수천 개의 항목을 처리 해야하는 경우 ng-grid의 페이지 매김을 사용하는 것이 좋습니다. ng-grid의 문서는 훌륭하고 많은 예제를 포함합니다. 페이지 매김과 결합하여도 정렬 및 검색이 지원됩니다.

현재 프로젝트의 스크린 샷은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

[2017 년 7 월 업데이트]

몇 년 동안 생산에서 ng-grid를 사용한 후에도이 구성 요소에 큰 문제가 없음을 알 수 있습니다. 예, 사소한 버그가 많지만 쇼 스토퍼는 없습니다 (적어도 사용 사례에서는). 처음부터 프로젝트를 시작하면이 컴포넌트를 사용하지 말 것을 강력히 권합니다. 이 컴포넌트는 AngularJS 1.0.x에 바인딩 된 경우에만 좋은 옵션 입니다. Angular 버전을 자유롭게 선택할 수 있으면 최신 구성 요소로 이동하십시오. Sam Deering은 Angular 4의 테이블 구성 요소 목록을 이 블로그 에서 컴파일했습니다 .


2
Wijmo도 또한 AngularJS와 함께 ngGrid 및 Wijmo 그리드에 대한 벤치 마크 샘플을 확인할 수 등 정렬, 그룹화 등의 기능과 함께 각도 지침을 제공합니다 demos.componentone.com/wijmo/Angular/GridBenchmark/...
인 Ashish

@Lars Behnke 부트 스트랩 테이블 스타일을 ng-grid에 적용하는 방법은 무엇입니까? 내가 본 한, ng-grid는 Bootstrap CSS가 신뢰할 수있는 테이블 tr 태그를 사용하지 않습니다.
elpddev

ng-grid 구성 요소의 구현은 Bootstrap을 기반으로하지 않습니다. 그래서 부트 스트랩 GUI 요소에 최대한 가깝게 보이도록 ng-grid.less를 사용자 정의했습니다.
Lars Behnke

1
프로젝트 NG-그리드에서 확인할 수있다 UI 그리드로 다시 작성되고있다 ui-grid.info
모스 타르

2
2016 통계에 따르면 ng-tables 플러그인은 여전히 ​​수요가 있습니다 .GitHub : A. ng-grid : ~ 3500 커밋, ~ 800 문제. B. 스마트 테이블 : ~ 300 커밋, ~ 40 이슈. C. ng-table : ~ 500 커밋, ~ 200 이슈. 구글 트렌드는 "angular smart table", "angular ui grid", "angular ng table"을 비교함으로써 동일한 아이디어를 입증합니다. google.com/trends/…
Anton Lyhin

87

"수천 개의 행"을 사용하면 서버 쪽 페이징을 수행하는 것이 가장 좋습니다. 다른 AngularJs 테이블 / 그리드 옵션을 잠시 살펴 보았을 때 세 가지 확실한 즐겨 찾기가있었습니다.

세 가지 모두 훌륭하지만 다르게 구현됩니다. 어느 쪽을 선택 하든지 다른 것보다 개인적인 취향에 더 잘 맞을 것입니다.

ng-grid 는 angular-ui와의 연관성으로 인해 가장 잘 알려져 있지만 개인적으로 ng-table을 선호 하며 구현 및 사용 방법을 정말 좋아하며 훌륭한 설명서와 예제를 제공하고 적극적으로 개선하고 있습니다.


7
나는 누군가가 ng-table을 언급하게되어 기뻤습니다. 나는 또한 특히 편집 모드에서 더 나은 스타일링을 가지고 있기 때문에 ng-grid보다 ng-table을 선호합니다.
Rob J

2
ngTable 악 대차에 뛰어 오르십시오. 나는 프로젝트를 위해 ng-grid와 함께 갔는데 꽤 끔찍했습니다. angular-ui와의 연관성 때문에 ng-grid와 순수하게 갔으며 github에서 조금 더 활발한 것으로 보입니다. ngTable로 교체하려고합니다. 바라건대 너무 어렵지 않을 것입니다.
Brett

10
앵귤러 에코 시스템을 처음 접하는 초보자 인 저는 처음에는 "더 나은"웹 사이트로 인해 ng-grid를 사용하려했지만 딥 네 스팅 된 div 구조로 인해 스타일 문제가 빨리 발생했습니다. 지금까지 실제로을 사용하기 때문에 ng-table이 더 좋습니다 table. 부트 스트랩 테이블 클래스를 적용 할 수 있으며 작동합니다.
Pierre Henry

1
smart-table의 코드와 접근 방식은 버전 v1.0.0 (2014 년 8 월)으로 급격히 변경되었으므로이 날짜 이전에 작성된 의견은 더 이상 관련이 없습니다
laurent

4
ng-table은 우크라이나의 한 사람이 관리하기 때문에 대부분 휴면 상태이며 다른 문제가 많이있었습니다. ng-grid는 버전 3.0의 ui-grid로 다시 작성되지만 프로덕션 준비가되지 않았습니다. 따라서 일반적으로 Angular 테이블 구현을 선택하거나 전환하기에 좋은시기가 아닙니다. 스마트 테이블은 또한 한 사람에 의해 유지 관리됩니다. 현재 ng-table을 사용하고 있지만 성숙함에 따라 ui-grid로 전환 할 계획입니다.
Splaktar

77

기능이 풍부한 각도 그리드는 다음과 같습니다.

trNgGrid

그 기능 중 일부 :

  • 단순성을 염두에두고 제작되었습니다.
  • 브라우저가 렌더링을 최적화 할 수 있도록 일반 HTML 테이블을 사용하고 있습니다.
  • 우려의 분리를 유지하면서 완전히 선언적이므로 컨트롤러를 손상시키지 않고 HTML로 완전히 설명 할 수 있습니다.
  • 템플릿 및 양방향 데이터 바인딩 된 속성을 통해 완전히 사용자 지정할 수 있습니다.
  • TypeScript로 작성된 코드로 유지 관리가 쉽습니다.
  • 선택적 Bootswatch 테마가있는 AngularJ 및 Bootstrap CSS는 매우 짧은 종속성 목록이 있습니다.

trNgGrid

즐겨. 네, 저자입니다. 나는 거기에 모든 각도 그리드를 먹었습니다.


5
이것은 좀 더 인식이 필요합니다. 나는로 시작했다 ngGrid. 2.x에서 3.x 로의 전환을 살펴보기 시작했거나 테이블을 작동시킬 수 없었기 때문에 어떤 버전을 사용 해야하는지 알 수 없었습니다. 그런 다음 ngTable어떤 종류의 작업 으로 옮겼습니다 . 정렬 또는 페이징이 제대로 작동하지 못했지만에서 데이터를로드하는 방식 때문입니다 $http. 그런 다음 나는 이것 trNgGrid과 거룩한 쓰레기를 보았습니다 ... 매우 쉽게 달릴 수 있습니다. 여기에 더 쓸 수 있으면 좋겠지 만 모두가 먼저 시도해 보는 것이 좋습니다!
Ronnie

2
@Ronnie에 전적으로 동의합니다. 더 많은주의를 기울여야합니다. 하루 종일 ng-grid / ui-grid와 '파이팅'을 한 후 조금 더 복잡한 작업을 한 후에 trNgGrid를 사용 해보고 첫 번째 시도를했습니다.
Johnny Everson

4
고정 헤더, 크기 조정 가능한 열, 드래그 가능한 열 등과 같은 중요한 항목을 찾을 수는 없지만 좋아 보입니다.
iLemming

부트 스트랩은 어려운 의존성입니까? 그리드에서 사용자 정의 CSS를 사용하고 싶습니다. 가능한?
Jasdeep Singh

더 많은 인식이 필요합니다. html 테이블을 사용하지 않는다는 것을 깨달을 때까지 ng-grid와 너무 가까워졌습니다.
ryanwinchester

39

이 게시물을 읽는 사람 : 자신에게 호의를 베풀고 ng-grid를 멀리하십시오. 버그로 가득 차 있습니다 (실제로 .lib의 거의 모든 부분이 어떻게 든 깨졌습니다). 개발자는 3.0에서 작동하기 위해 2.0.x 분기 지원을 포기했습니다. ng-grid 코드는 작지 않고 간단하지 않습니다. 많은 시간과 일반적으로 각도와 js에 대한 깊은 지식이 없다면 어려운 작업이 될 것입니다.

결론 : 버그로 가득 차 있으며 마지막 안정 버전은 버려졌습니다.

github은 PR로 가득 차 있지만 무시됩니다. 그리고 2.x 브랜치에서 버그를보고하면 닫힙니다.

나는 오픈 소스 proyect이며 불만이 조금 어긋난 것처럼 들릴 수도 있지만 라이브러리를 찾는 개발자의 관점에서 볼 때 그것은 내 의견입니다. 큰 proyect에서 ng-grid로 많은 시간을 보냈으며 헤드 캐시는 끝나지 않습니다.


두통을 유발 한 이러한 버그 / 시나리오의 몇 가지 예를 말씀해 주시겠습니까? 잘 알려진 옵션 (ng-grid, trNgGrid, ng-table, SmartTable) 중 하나를 선택하기 때문에 관심이 있습니다 .ng-grid로 시작하고 게시물을 읽은 후 10 개의 upvotes를 본 후 방금 두려워했습니다!
스포츠

1
글쎄, 그들 중 일부는 내가 믿어 고정되었고, 그들은 몇 달 동안 거기에 앉아 있던 20 개의 풀 요청처럼 병합했습니다. 내가 가진 문제? 그들 중 많은 사람들이 그리드 구성을 위해 테이블 ​​대신 div를 사용하는 원인이었습니다. 또한 그리드가 노출하는 이벤트는 버그가 있으므로 동작과 같은 무한 스크롤을 구현했기 때문에 많은 문제가 발생합니다. 스크롤 이벤트는해서는 안되는 일부 상황에서 무작위로 발생했습니다. 열 자동 너비가 전혀 작동하지 않습니다.
agusluc

결국 그리드 사용 방법과 프로젝트에 필요한 사용자 지정 수준에 따라 달라집니다. github을 확인하고 열린 문제를 읽고 모든 사용 사례를 다루는 데모를 작성하고 작동 방식을 확인하십시오. 그러나 2.x 브랜치 개발이 중단되어 향후 지원이 전혀 없을 것입니다.
agusluc

15

TrNgGrid는 지금까지 훌륭하게 작동하고 있습니다. ng-grid를 선호 하고이 구성 요소로 이동 한 이유는 다음과 같습니다.

  • 그것은 부트 워치 될 수 있도록 테이블 요소를 만들고 부트 스트랩 .css의 모든 기능을 사용합니다 (ng-grid는 jQuery UI 테마를 사용합니다).

  • 간단하고 잘 문서화 된 그리드 옵션.

  • 서버 크기 페이징 작동


10

jQuery 배경이있는 경우 Angular에서 어떻게 생각 해야하는지에 대한이 답변의 끝 에서 Josh David Miller의 최상위 게시물은 다음과 같습니다.

jQuery를 사용하지 마십시오. 포함하지 마십시오. 그것은 당신을 다시 잡아 것입니다. 그리고 jQuery에서 이미 해결하는 방법을 알고 있다고 생각하는 문제가 발생하면을 얻기 전에 $AngularJS를 제한하는 방법을 생각해보십시오. 모른다면 물어보십시오! 20 중 19 번, jQuery가 필요하지 않고 jQuery로 해결하려고 시도하는 가장 좋은 방법은 더 많은 작업을 수행하는 것입니다.

이제 사용자 지정을위한 수많은 기능과 옵션이 포함 된 그리드를 원한다면 jQuery DataTables 가 가장 좋습니다. 내가 본 Angular 전용 그리드는 jQuery DataTables가 할 수있는 것에 가깝지 않습니다.

그러나 jQuery DataTables는 AngularJS와 잘 통합되지 않습니다. (다양한 노력이 있었지만 완벽한 통합을 제공하는 것은 없습니다.)

아마도 그것은 두 가지 옵션을 가진 사람을 떠날 것입니다.

첫 번째는 DataTables만큼 기능이 풍부한 순수한 Angular 그리드를 사용하는 것입니다. 나는 거기에 다른 Angular 그리드와 함께 먹는 것에 대해 @Moonstom에 동의하며 trNgGrid는 멋지게 보입니다.

두 번째 옵션은 다음과 같습니다. 이것은 순수한 Angular 그리드로 휠을 다시 발명하려는 노력으로 인해 jQuery를 사용하고 jQuery DataTables 플러그인과 함께 사용해야 하는 20 가지 중 드문 경우 중 하나입니다 . DataTables보다 덜 견고한 휠.

그렇지 않으면 좋을 것입니다. 그러나 Angular 생태계가 jQuery DataTables만큼 강력한 그리드를 제공하는 것을 보지 못했습니다. 웹 애플리케이션에서 좋은 데이터 그리드가 좋은 것처럼 보이지는 않습니다 좋은 그리드는 필수입니다.


+1 그렇습니다. DataTables가 아직 통합되지 않은 것은 부끄러운 일입니다. 아마도 DOM과 너무 밀접하게 연결되어 있습니다.
CSSian


9

부트 스트랩 3 클래스를 사용하고 ng-repeat 지시문을 사용하여 테이블을 작성할 수 있습니다.

예:

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>

라이브 예 : http://jsfiddle.net/choroshin/5YDJW/5/

최신 정보:

또는 항상 인기있는 ng-grid을 시도 할 수 있습니다 . ng-grid는 정렬, 검색, 그룹화 등에 적합하지만 아직 대규모 데이터에서 테스트하지 않았습니다.


7
그러나 이것은 Angular에서 정렬, 페이지 매김, 필터링, Ajax Raloading 등을 사용하지 않고 테이블을 만드는 표준 방법입니다. 그러나 수천 줄이 있으면 모든 응용 분야가 연삭 정지됩니다.
mainguy

이것은 매우 게으른 UI로 이어질 것입니다.
boi_echos

8

적응 스트랩 . 여기 바이올린이 있습니다.

매우 가벼우 며 행 높이가 동적입니다.

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

열 너비를 변경할 수 있습니까?
Tomasz Waszczyk

4

다른 답변에서 언급했듯이 : 검색 테이블의 경우 선택 및 페이지 매김 " ng-grid "가 최선의 옵션입니다. 내가 만난 몇 가지 사항은 구현하는 동안 유용 할 수있는 것을 언급 할 것입니다.

env를 설정하려면

  1. JSON 데이터를 생성하려면 http://www.json-generator.com/참조하십시오 . 개발 속도를 높이기 위해 샘플 데이터 세트를 가져 오는 매우 멋진 도구입니다.

  2. 구현을 위해이 플런저를 확인할 수 있습니다. 검색, 선택 및 페이지 매김을 포함하도록 수정했습니다. http://plnkr.co/edit/gJPBz0pVxGzKlI8MGOit?p=preview

스마트 테이블에 대한이 자습서를 확인할 수 있습니다. 필요한 모든 정보를 제공합니다. http://lorenzofox3.github.io/smart-table-website/

다음 질문은 bootstrap 3: 정확하지는 않지만이 템플릿은 좋아 보입니다. - 당신은 사용할 수 있습니다 https://github.com/angular-ui/bootstrap/tree/master/template 모든 템플릿 잘 작성됩니다.

부트 스트랩 3을 angularjs로 변환하는 방법에 대해 계속할 수 있지만 이미 다음 링크에서 언급했습니다.

스마트 테이블에 대해서는 각도 버전이 준비되어 있는지 확인해야합니다.


3

검도 그리드는 Wijmo뿐만 아니라 좋습니다. Kendo가 데이터 소스에 Angular 바인딩을 제공한다는 것을 알고 Wijmo에 Angular 플러그인이 있다고 생각합니다. 그래도 무료는 아닙니다.


3
나는 KendoUI에 끔찍한 경험을했습니다. 그것은 개처럼 달리고 더 복잡한 구성 요소에 대해 너무 해킹 된 것처럼 보이므로 "즉시 사용할 수없는"기능을 작동시키는 것은 어렵지 않습니다. 또한 서버 구성 요소와 함께 작동하도록 설계되었으며 에지 사례에 대해 문서화가 잘되어 있지 않습니다. 나는 그들에게서 멀리 떨어져있을 것입니다!
Precastic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.