web-dev-qa-db-ja.com

angular jsと追加の行と列を持つdatatableを使用してデータをバインドする方法

こんにちは私はangularjsとデータテーブルjsを備えたASP.NETMVCを使用して1つのアプリケーションを作成しています。

this の記事を利用して、angular jsを使用してdatatableを使用してデータを表示するテーブルを実装しました。

しかし、同じ機能を使用して、次のようなhtmlの列名でデータを静的にバインドしたいと思います。

記事では、著者は以下を使用して作業を行っています。

<table id="entry-grid" datatable="" dt-options="dtOptions" 
       dt-columns="dtColumns" class="table table-hover">
</table>

しかし、私のデータに従ってng-repeatを使用して上記と同じ機能を使用することにより、このようにしたいと思います。

<table id="tblusers" class="table table-bordered table-striped table-condensed datatable">
  <thead>
    <tr>
      <th width="2%"></th>
      <th>User Name</th>
      <th>Email</th>
      <th>LoginID</th>
      <th>Location Name</th>
      <th>Role</th>
      <th width="7%" class="center-text">Active</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="user in Users">
      <td><a href="#" ng-click="DeleteUser(user)"><span class="icon-trash"></span></a></td>
      <td><a class="ahyperlink" href="#" ng-click="EditUser(user)">{{user.UserFirstName}} {{user.UserLastName}}</a></td>
      <td>{{user.UserEmail}}</td>
      <td>{{user.LoginID}}</td>
      <td>{{user.LocationName}}</td>
      <td>{{user.RoleName}}</td>
      <td class="center-text" ng-if="user.IsActive == true"><span class="icon-check2"></span></td>
      <td class="center-text" ng-if="user.IsActive == false"><span class="icon-close"></span></td>
    </tr>
  </tbody>
</table>

また、[新しいレコードの追加]ボタンをクリックしたときと同じ機能を使用して、テーブル内に新しい列を追加したいと思います。

出来ますか?

もしそうなら、それがどのように可能であるかは素晴らしいでしょう、そして誰かがjsfiddleまたは任意のエディタで私を見せてくれたら事前に感謝します。

お願いします [〜#〜]ダウンロード[〜#〜] デモ用にVisualStudioエディターで作成されたソースコード

10
3 rules

次の構造のように、コメントでdavidkonradの answer をたどることができます。

HTML:

<table id="entry-grid" datatable="ng" class="table table-hover">
            <thead>
                <tr>
                    <th>
                        CustomerId
                    </th>
                    <th>Company Name </th>
                    <th>Contact Name</th>
                    <th>
                        Phone
                    </th>
                    <th>
                        City
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="c in Customers">
                    <td>{{c.CustomerID}}</td>
                    <td>{{c.CompanyName}}</td>
                    <td>{{c.ContactName}}</td>
                    <td>{{c.Phone}}</td>\
                    <td>{{c.City}}</td>
                </tr>
            </tbody>
        </table>

angularのようにコントローラーを作成します:

var app = angular.module('MyApp1', ['datatables']);
app.controller('homeCtrl', ['$scope', 'HomeService',
    function ($scope, homeService) {

        $scope.GetCustomers = function () {
            homeService.GetCustomers()
                .then(
                function (response) {
                    debugger;
                    $scope.Customers = response.data;
                });
        }

        $scope.GetCustomers();
    }])

サービス:

app.service('HomeService', ["$http", "$q", function ($http, $q) {

    this.GetCustomers = function () {
        debugger;
        var request = $http({
            method: "Get",
            url: "/home/getdata"
        });
        return request;
    }
}]);

datatable="ng"による「角度のある方法」を使用するようにangular-dataTablesに指示します。

<table id="entry-grid" 
   datatable="ng" 
   dt-options="dtOptions" 
   dt-columns="dtColumns" 
   class="table table-hover">
</table> 

次に、dtColumnsを変更して、JSONエントリではなく列インデックスをアドレス指定します。

$scope.dtColumns = [
   DTColumnBuilder.newColumn(0).withTitle('').withOption('width', '2%'),
   DTColumnBuilder.newColumn(1).withTitle('User Name'),
   DTColumnBuilder.newColumn(2).withTitle('Email'),
   DTColumnBuilder.newColumn(3).withTitle('LoginID'),
   DTColumnBuilder.newColumn(4).withTitle('Location Name'),
   DTColumnBuilder.newColumn(5).withTitle('Role Name'),
   DTColumnBuilder.newColumn(6).withTitle('Active').withOption('width', '7%') 
];

上記のようにすると、<thead>セクションを完全にスキップできます。最後に、最後の2つの冗長な<td>を1つに減らします:

<td class="center-text">
  <span ng-show="user.IsActive == true" class="icon-check2"></span>
  <span ng-show="user.IsActive == false" class="icon-close"></span>
</td>
4
davidkonrad