【问题标题】:asp.net mvc angular jquery table not workingasp.net mvc angular jquery 表不工作
【发布时间】:2019-02-20 14:18:25
【问题描述】:

我是 angular 的 asp.net mvc 新手,我无法添加加载 jquery 表。Jquery 数据表显示 表中没有可用数据,下面是我的代码

我的控制器

app.controller('SpaceController', function ($scope, SpaceService) {

    $scope.getAll = function () {

        loader(true);
        var getData = SpaceService.getAllData();
        getData.then(function (response) {

            if (response.data.success) {
                $scope.listdt = response.data.data;
                $('#TblID').DataTable();
                $scope.populateStatus();
                loader(false);

            }
            else {
                errorAlert("Oops", response.data.message);
                loader(false);
            }
        });
    }
})

我的服务

app.service("SpaceService", function ($http) {


        this.getAllData = function () {
            var response = $http({
                method: "GET",
                url: "/Space/getAll",
                dataType: "json"
            });
            return response;
        }
});

我的表格 html

<table class="table display" id="TblID">
    <thead>
        <tr>
            <th>ID</th>
            <th>Key</th>
            <th>Name</th>
            <th>Description</th>
            <th>Status</th>
            <th>Action</th>
        </tr>
    </thead>

    <tbody>

        <tr ng-repeat="d in listdt">
            <td>{{d.SpaceID}}</td>
            <td>{{d.SpaceKey}}</td>
            <td>{{d.SpaceName}}</td>
            <td>{{d.SpaceDesc}}</td>
            <td> <span
                    class="label label-table {{d.StatusKey == 'A' ? 'label-success' : 'label-red'}}">{{d.StatusName}}</span>
            </td>
            <td>
                <a class="btn btn-primary btn-sm" ng-click="edit(d)"><i class="fa fa-pencil fa-lg"></i></a>
                <a class="btn btn-danger btn-sm" ng-click="delete(d)"><i class="fa fa-trash fa-lg"></i></a>
            </td>
        </tr>

    </tbody>
</table>

我无法找到为什么它显示 No Data,当我尝试从表中搜索一些东西时,所有行都被隐藏并开始显示 No data available in table。下面是截图。

【问题讨论】:

  • url: "/Space/getAll" => 这是对 MVC 控制器操作的调用吗?您能否提供从该操作返回的示例数据来验证搜索框的行为?
  • @TetsuyaYamamoto, {"data":[{"SpaceID":16,"SpaceKey":"Space - 11","SpaceName":"Space - 111","SpaceDesc":"Space - 11j","SpaceStatus":2,"StatusName":"In-active","StatusKey":"I"}],"success":true,"message":""}

标签: jquery angularjs asp.net-mvc razor datatables


【解决方案1】:

混合框架是一个臭名昭著的坏主意。您正在使用 jquery 插件来呈现由 AngularJs 生成的表。我确信有很好的 AngularJs 组件可以做类似于 DataTables 的事情。

可能发生的情况是,当调用$('#TblID').DataTable() 时,DOM 尚未使用呈现的表数据刷新。因此,当 DataTables 开始呈现时,某些信息不可用。如果这是正确的,一个hacky的解决方案是在setTimeout()内部调用DataTable()

getData.then(function (response) {
  if (response.data.success) {
     $scope.listdt = response.data.data;
     $scope.populateStatus();
     $timeout(function() {
        $('#TblID').DataTable();
     })
     loader(false);
  }
  /* ... */
}

如果这不能解决您的问题,那么我建议不要让 Angular 渲染表格并将响应直接传递给 DataTable 函数。

getData.then(function (response) {
  if (response.data.success) {
     $scope.listdt = response.data.data;
     $scope.populateStatus();
     $('#TblID').DataTable({
       data: response.data.data,
       columns: [
         { data: 'SpaceID', name: 'ID' },
         { data: 'SpaceKey', name: 'Key' },
         { data: 'SpaceName', name: 'Name' },
         { data: 'SpaceDesc', name: 'Description' },
         { data: 'StatusName', name: 'Status' } /* use more advanced options for style */
       ],
       buttons: [ 
         { tag: 'edit', className: 'fa fa-pencil fa-lg', action: (e, b) => $scope.edit(b.row().data()) },
         { tag: 'delete', className: 'fa fa-trash fa-lg', action: (e, b) => $scope.delete(b.row().data()) }
       ]
     });

     loader(false);
  }
  /* ... */
}

【讨论】:

  • 请分享一些使用 angular 的数据表的好例子。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-12-25
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多