[JQUERY] Angularjs로 jQuery DataTable 사용
JQUERYAngularjs로 jQuery DataTable 사용
해결법
-
1.이것을보십시오 : Angularjs + jQuery (DataTable)
이것을보십시오 : Angularjs + jQuery (DataTable)
전체 코드 : http://jsfiddle.net/zdam/7klfu/
jQuery DataTables의 설명서 : http://www.datatables.net/
var dialogApp = angular.module('tableExample', []); dialogApp.directive('myTable', function() { return function(scope, element, attrs) { // apply DataTable options, use defaults if none specified by user var options = {}; if (attrs.myTable.length > 0) { options = scope.$eval(attrs.myTable); } else { options = { "bStateSave": true, "iCookieDuration": 2419200, /* 1 month */ "bJQueryUI": true, "bPaginate": false, "bLengthChange": false, "bFilter": false, "bInfo": false, "bDestroy": true }; } // Tell the dataTables plugin what columns to use // We can either derive them from the dom, or use setup from the controller var explicitColumns = []; element.find('th').each(function(index, elem) { explicitColumns.push($(elem).text()); }); if (explicitColumns.length > 0) { options["aoColumns"] = explicitColumns; } else if (attrs.aoColumns) { options["aoColumns"] = scope.$eval(attrs.aoColumns); } // aoColumnDefs is dataTables way of providing fine control over column config if (attrs.aoColumnDefs) { options["aoColumnDefs"] = scope.$eval(attrs.aoColumnDefs); } if (attrs.fnRowCallback) { options["fnRowCallback"] = scope.$eval(attrs.fnRowCallback); } // apply the plugin var dataTable = element.dataTable(options); // watch for any changes to our data, rebuild the DataTable scope.$watch(attrs.aaData, function(value) { var val = value || null; if (val) { dataTable.fnClearTable(); dataTable.fnAddData(scope.$eval(attrs.aaData)); } }); }; }); function Ctrl($scope) { $scope.message = ''; $scope.myCallback = function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { $('td:eq(2)', nRow).bind('click', function() { $scope.$apply(function() { $scope.someClickHandler(aData); }); }); return nRow; }; $scope.someClickHandler = function(info) { $scope.message = 'clicked: '+ info.price; }; $scope.columnDefs = [ { "mDataProp": "category", "aTargets":[0]}, { "mDataProp": "name", "aTargets":[1] }, { "mDataProp": "price", "aTargets":[2] } ]; $scope.overrideOptions = { "bStateSave": true, "iCookieDuration": 2419200, /* 1 month */ "bJQueryUI": true, "bPaginate": true, "bLengthChange": false, "bFilter": true, "bInfo": true, "bDestroy": true }; $scope.sampleProductCategories = [ { "name": "1948 Porsche 356-A Roadster", "price": 53.9, "category": "Classic Cars", "action":"x" }, { "name": "1948 Porsche Type 356 Roadster", "price": 62.16, "category": "Classic Cars", "action":"x" }, { "name": "1949 Jaguar XK 120", "price": 47.25, "category": "Classic Cars", "action":"x" } , { "name": "1936 Harley Davidson El Knucklehead", "price": 24.23, "category": "Motorcycles", "action":"x" }, { "name": "1957 Vespa GS150", "price": 32.95, "category": "Motorcycles", "action":"x" }, { "name": "1960 BSA Gold Star DBD34", "price": 37.32, "category": "Motorcycles", "action":"x" } , { "name": "1900s Vintage Bi-Plane", "price": 34.25, "category": "Planes", "action":"x" }, { "name": "1900s Vintage Tri-Plane", "price": 36.23, "category": "Planes", "action":"x" }, { "name": "1928 British Royal Navy Airplane", "price": 66.74, "category": "Planes", "action":"x" }, { "name": "1980s Black Hawk Helicopter", "price": 77.27, "category": "Planes", "action":"x" }, { "name": "ATA: B757-300", "price": 59.33, "category": "Planes", "action":"x" } ]; }
-
2.jQueryDatatables를 사용하여 jQueryDatatables를 사용하여 실험하는 데 많은 시간을 실험하면 NG-Table이라는 원어민 지침으로 필요한 것을 발견했습니다. 그것은 정렬, 페이지 매김 및 ajax 재로드 (몇 가지 조정 가능 하중로 가짜의 일종의 게으른 로딩)를 제공합니다.
jQueryDatatables를 사용하여 jQueryDatatables를 사용하여 실험하는 데 많은 시간을 실험하면 NG-Table이라는 원어민 지침으로 필요한 것을 발견했습니다. 그것은 정렬, 페이지 매김 및 ajax 재로드 (몇 가지 조정 가능 하중로 가짜의 일종의 게으른 로딩)를 제공합니다.
-
3.미래의 연구원을위한 기준과 같이 새로운 답변을 추가하고 아무도 언급하지 않은 것으로 언급하지 않으면 유효하다고 생각합니다.
미래의 연구원을위한 기준과 같이 새로운 답변을 추가하고 아무도 언급하지 않은 것으로 언급하지 않으면 유효하다고 생각합니다.
또 다른 좋은 옵션은 그리드의 http://angular-ui.github.io/nggrid/의입니다.
그리고 몇 가지 개선 사항이있는 베타 버전 (http://ui-grid.info/)이 있습니다.
최신 정보:
UI 그리드가 더 이상 베타가 아닌 것처럼 보입니다.
-
4.Angularjs의 경우 DataTable 설정을 위해 "angular-datatables.min.js"파일을 사용해야합니다. http://l-lin.github.io/angular-datatables/#/welcome에서 이것을 얻을 수 있습니다.
Angularjs의 경우 DataTable 설정을 위해 "angular-datatables.min.js"파일을 사용해야합니다. http://l-lin.github.io/angular-datatables/#/welcome에서 이것을 얻을 수 있습니다.
그런 다음 아래와 같은 코드를 쓸 수 있습니다,
<script> var app = angular.module('AngularWayApp', ['datatables']); </script> <div ng-app="AngularWayApp" ng-controller="AngularWayCtrl"> <table id="example" datatable="ng" class="table"> <thead> <tr> <th><b>UserID</b></th> <th><b>Firstname</b></th> <th><b>Lastname</b></th> <th><b>Email</b></th> <th><b>Actions</b></th> </tr> </thead> <tbody> <tr ng-repeat="user in users" ng-click="testingClick(user)"> <td> {{user.UserId}} </td> <td> {{user.FirstName}} </td> <td> {{user.Lastname}} </td> <td> {{user.Email}} </td> <td> <span ng-click="editUser(user)" style="color:blue;cursor: pointer; font-weight:500; font-size:15px" class="btnAdd" data-toggle="modal" data-target="#myModal">Edit</span> | <span ng-click="deleteUser(user)" style="color:red; cursor: pointer; font-weight:500; font-size:15px" class="btnRed">Delete</span> </td> </tr> </tbody> </table> </div>
-
5.다른 DEVS에서 생성 한 드래그 앤 드롭 각 모듈을 사용하는 유혹을 알고 있지만 실제로 $ HTTP 서비스 기회를 호출하여 NG 반복 데이터로부터 행을 동적으로 추가 / 제거하는 것과 같은 비표준을 동적으로 추가 / 제거하는 것이 아닌 한 실제로 지침 기반 솔루션이 필요 하므로이 방향으로 이동하면 실제로 필요하지 않은 여분의 감시자를 만들었습니다.
다른 DEVS에서 생성 한 드래그 앤 드롭 각 모듈을 사용하는 유혹을 알고 있지만 실제로 $ HTTP 서비스 기회를 호출하여 NG 반복 데이터로부터 행을 동적으로 추가 / 제거하는 것과 같은 비표준을 동적으로 추가 / 제거하는 것이 아닌 한 실제로 지침 기반 솔루션이 필요 하므로이 방향으로 이동하면 실제로 필요하지 않은 여분의 감시자를 만들었습니다.
이 구현은 다음을 제공하는 것입니다.
구현은 쉽습니다. View 컨트롤러에서 Angular의 jQuery DOM을 사용하기 만하면됩니다.
컨트롤러 내부 :
'use strict'; var yourApp = angular.module('yourApp.yourController.controller', []); yourApp.controller('yourController', ['$scope', '$http', '$q', '$timeout', function ($scope, $http, $q, $timeout) { $scope.users = [ { email: 'email@address.com', name: { first: 'User', last: 'Last Name' }, phone: '(416) 555-5555', permissions: 'Admin' }, { email: 'example@email.com', name: { first: 'First', last: 'Last' }, phone: '(514) 222-1111', permissions: 'User' } ]; angular.element(document).ready( function () { dTable = $('#user_table') dTable.DataTable(); }); }]);
이제 HTML보기에서 다음을 수행 할 수 있습니다.
<div class="table table-data clear-both" data-ng-show="viewState === possibleStates[0]"> <table id="user_table" class="users list dtable"> <thead> <tr> <th>E-mail</th> <th>First Name</th> <th>Last Name</th> <th>Phone</th> <th>Permissions</th> <th class="blank-cell"></th> </tr> </thead> <tbody> <tr data-ng-repeat="user in users track by $index"> <td>{{ user.email }}</td> <td>{{ user.name.first }}</td> <td>{{ user.name.last }}</td> <td>{{ user.phone }}</td> <td>{{ user.permissions }}</td> <td class="users controls blank-cell"> <a class="btn pointer" data-ng-click="showEditUser( $index )">Edit</a> </td> </tr> </tbody> </table> </div>
-
6.참조 용이 링크를 참조하십시오 : http : //codepen.io/kalaiselvan/pen/rrrbzda.
참조 용이 링크를 참조하십시오 : http : //codepen.io/kalaiselvan/pen/rrrbzda.
<script> var app=angular.module('formvalid', ['ui.bootstrap','ui.utils']); app.controller('validationCtrl',function($scope){ $scope.data=[ [ "Tiger Nixon", "System Architect", "Edinburgh", "5421", "2011\/04\/25", "$320,800" ], [ "Garrett Winters", "Accountant", "Tokyo", "8422", "2011\/07\/25", "$170,750" ], [ "Ashton Cox", "Junior Technical Author", "San Francisco", "1562", "2009\/01\/12", "$86,000" ], [ "Cedric Kelly", "Senior Javascript Developer", "Edinburgh", "6224", "2012\/03\/29", "$433,060" ], [ "Airi Satou", "Accountant", "Tokyo", "5407", "2008\/11\/28", "$162,700" ], [ "Brielle Williamson", "Integration Specialist", "New York", "4804", "2012\/12\/02", "$372,000" ], [ "Herrod Chandler", "Sales Assistant", "San Francisco", "9608", "2012\/08\/06", "$137,500" ], [ "Rhona Davidson", "Integration Specialist", "Tokyo", "6200", "2010\/10\/14", "$327,900" ], [ "Colleen Hurst", "Javascript Developer", "San Francisco", "2360", "2009\/09\/15", "$205,500" ], [ "Sonya Frost", "Software Engineer", "Edinburgh", "1667", "2008\/12\/13", "$103,600" ], [ "Jena Gaines", "Office Manager", "London", "3814", "2008\/12\/19", "$90,560" ], [ "Quinn Flynn", "Support Lead", "Edinburgh", "9497", "2013\/03\/03", "$342,000" ], [ "Charde Marshall", "Regional Director", "San Francisco", "6741", "2008\/10\/16", "$470,600" ], [ "Haley Kennedy", "Senior Marketing Designer", "London", "3597", "2012\/12\/18", "$313,500" ], [ "Tatyana Fitzpatrick", "Regional Director", "London", "1965", "2010\/03\/17", "$385,750" ], [ "Michael Silva", "Marketing Designer", "London", "1581", "2012\/11\/27", "$198,500" ], [ "Paul Byrd", "Chief Financial Officer (CFO)", "New York", "3059", "2010\/06\/09", "$725,000" ], [ "Gloria Little", "Systems Administrator", "New York", "1721", "2009\/04\/10", "$237,500" ], [ "Bradley Greer", "Software Engineer", "London", "2558", "2012\/10\/13", "$132,000" ], [ "Dai Rios", "Personnel Lead", "Edinburgh", "2290", "2012\/09\/26", "$217,500" ], [ "Jenette Caldwell", "Development Lead", "New York", "1937", "2011\/09\/03", "$345,000" ], [ "Yuri Berry", "Chief Marketing Officer (CMO)", "New York", "6154", "2009\/06\/25", "$675,000" ], [ "Caesar Vance", "Pre-Sales Support", "New York", "8330", "2011\/12\/12", "$106,450" ], [ "Doris Wilder", "Sales Assistant", "Sidney", "3023", "2010\/09\/20", "$85,600" ], [ "Angelica Ramos", "Chief Executive Officer (CEO)", "London", "5797", "2009\/10\/09", "$1,200,000" ], [ "Gavin Joyce", "Developer", "Edinburgh", "8822", "2010\/12\/22", "$92,575" ], [ "Jennifer Chang", "Regional Director", "Singapore", "9239", "2010\/11\/14", "$357,650" ], [ "Brenden Wagner", "Software Engineer", "San Francisco", "1314", "2011\/06\/07", "$206,850" ], [ "Fiona Green", "Chief Operating Officer (COO)", "San Francisco", "2947", "2010\/03\/11", "$850,000" ], [ "Shou Itou", "Regional Marketing", "Tokyo", "8899", "2011\/08\/14", "$163,000" ], [ "Michelle House", "Integration Specialist", "Sidney", "2769", "2011\/06\/02", "$95,400" ], [ "Suki Burks", "Developer", "London", "6832", "2009\/10\/22", "$114,500" ], [ "Prescott Bartlett", "Technical Author", "London", "3606", "2011\/05\/07", "$145,000" ], [ "Gavin Cortez", "Team Leader", "San Francisco", "2860", "2008\/10\/26", "$235,500" ], [ "Martena Mccray", "Post-Sales support", "Edinburgh", "8240", "2011\/03\/09", "$324,050" ], [ "Unity Butler", "Marketing Designer", "San Francisco", "5384", "2009\/12\/09", "$85,675" ], [ "Howard Hatfield", "Office Manager", "San Francisco", "7031", "2008\/12\/16", "$164,500" ], [ "Hope Fuentes", "Secretary", "San Francisco", "6318", "2010\/02\/12", "$109,850" ], [ "Vivian Harrell", "Financial Controller", "San Francisco", "9422", "2009\/02\/14", "$452,500" ], [ "Timothy Mooney", "Office Manager", "London", "7580", "2008\/12\/11", "$136,200" ], [ "Jackson Bradshaw", "Director", "New York", "1042", "2008\/09\/26", "$645,750" ], [ "Olivia Liang", "Support Engineer", "Singapore", "2120", "2011\/02\/03", "$234,500" ], [ "Bruno Nash", "Software Engineer", "London", "6222", "2011\/05\/03", "$163,500" ], [ "Sakura Yamamoto", "Support Engineer", "Tokyo", "9383", "2009\/08\/19", "$139,575" ], [ "Thor Walton", "Developer", "New York", "8327", "2013\/08\/11", "$98,540" ], [ "Finn Camacho", "Support Engineer", "San Francisco", "2927", "2009\/07\/07", "$87,500" ], [ "Serge Baldwin", "Data Coordinator", "Singapore", "8352", "2012\/04\/09", "$138,575" ], [ "Zenaida Frank", "Software Engineer", "New York", "7439", "2010\/01\/04", "$125,250" ], [ "Zorita Serrano", "Software Engineer", "San Francisco", "4389", "2012\/06\/01", "$115,000" ], [ "Jennifer Acosta", "Junior Javascript Developer", "Edinburgh", "3431", "2013\/02\/01", "$75,650" ], [ "Cara Stevens", "Sales Assistant", "New York", "3990", "2011\/12\/06", "$145,600" ], [ "Hermione Butler", "Regional Director", "London", "1016", "2011\/03\/21", "$356,250" ], [ "Lael Greer", "Systems Administrator", "London", "6733", "2009\/02\/27", "$103,500" ], [ "Jonas Alexander", "Developer", "San Francisco", "8196", "2010\/07\/14", "$86,500" ], [ "Shad Decker", "Regional Director", "Edinburgh", "6373", "2008\/11\/13", "$183,000" ], [ "Michael Bruce", "Javascript Developer", "Singapore", "5384", "2011\/06\/27", "$183,000" ], [ "Donna Snider", "Customer Support", "New York", "4226", "2011\/01\/25", "$112,000" ] ] $scope.dataTableOpt = { //if any ajax call }; }); </script> <div class="container" ng-app="formvalid"> <div class="panel" data-ng-controller="validationCtrl"> <div class="panel-heading border"> <h2>Data table using jquery datatable in Angularjs </h2> </div> <div class="panel-body"> <table class="table table-bordered bordered table-striped table-condensed datatable" ui-jq="dataTable" ui-options="dataTableOpt"> <thead> <tr> <th>#</th> <th>Name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start Date</th> </tr> </thead> <tbody> <tr ng-repeat="n in data"> <td>{{$index+1}}</td> <td>{{n[0]}}</td> <td>{{n[1]}}</td> <td>{{n[2]}}</td> <td>{{n[3]}}</td> <td>{{n[4] | date:'dd/MM/yyyy'}}</td> </tr> </tbody> </table> </div> </div> </div>
from https://stackoverflow.com/questions/14242455/using-jquery-datatable-with-angularjs by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 언제 jQuery 함수에서 반환을 사용해야합니까? (0) | 2020.11.02 |
---|---|
[JQUERY] jQuery : 키 누르면 백 스페이스가 화재하지 않습니까? (0) | 2020.11.02 |
[JQUERY] 지연된 물건은 무엇입니까? (0) | 2020.11.02 |
[JQUERY] jQuery Deferred의 "then"방법을 사용해야하며 "파이프"방법을 사용해야합니까? (0) | 2020.11.02 |
[JQUERY] 둘 이상의 jQuery 버전을 포함합니다 (0) | 2020.11.02 |