복붙노트

[JQUERY] Angularjs로 jQuery DataTable 사용

JQUERY

Angularjs로 jQuery DataTable 사용

해결법


  1. 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. 2.jQueryDatatables를 사용하여 jQueryDatatables를 사용하여 실험하는 데 많은 시간을 실험하면 NG-Table이라는 원어민 지침으로 필요한 것을 발견했습니다. 그것은 정렬, 페이지 매김 및 ajax 재로드 (몇 가지 조정 가능 하중로 가짜의 일종의 게으른 로딩)를 제공합니다.

    jQueryDatatables를 사용하여 jQueryDatatables를 사용하여 실험하는 데 많은 시간을 실험하면 NG-Table이라는 원어민 지침으로 필요한 것을 발견했습니다. 그것은 정렬, 페이지 매김 및 ajax 재로드 (몇 가지 조정 가능 하중로 가짜의 일종의 게으른 로딩)를 제공합니다.


  3. 3.미래의 연구원을위한 기준과 같이 새로운 답변을 추가하고 아무도 언급하지 않은 것으로 언급하지 않으면 유효하다고 생각합니다.

    미래의 연구원을위한 기준과 같이 새로운 답변을 추가하고 아무도 언급하지 않은 것으로 언급하지 않으면 유효하다고 생각합니다.

    또 다른 좋은 옵션은 그리드의 http://angular-ui.github.io/nggrid/의입니다.

    그리고 몇 가지 개선 사항이있는 베타 버전 (http://ui-grid.info/)이 있습니다.

    최신 정보:

    UI 그리드가 더 이상 베타가 아닌 것처럼 보입니다.


  4. 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> &nbsp;&nbsp; | &nbsp;&nbsp;
                                                    <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. 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. 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>
    
  7. from https://stackoverflow.com/questions/14242455/using-jquery-datatable-with-angularjs by cc-by-sa and MIT license