1

我目前正在处理需要一些排序的表。由于该项目使用 Angular (v1.2.12),我开始使用ngTable模块 (v0.3.2)。

默认排序是标题,但年份也可以用作排序选项。当我加载页面时它工作正常,但是当我单击表格标题时,单击的列会被排序,但排序不会反映在标题中,也不再设置排序参数。

当我开始调试时,我看到 params.sorting() 返回:{title: undefined}从那一刻起,它也不再可能单击可排序的标题,它不再做任何事情。

我想我错过了一些东西,但似乎找不到什么

我的数据如下:

[{
    "year": 2014,
    "title": "Golden title"
}, {
    "year": 2013,
    "title": "Golden title"
}, {
    "year": 2013,
    "title": "Another title"
}, {
    "year": 2014,
    "title": "Whetshoverwerd xsade  aas"
}, {
    "year": 2013,
    "title": "Another brilliant title"
}, {
"year": 2013,
    "title": "Wherever I may SOAP"
}]

风景:

<table ng-table="tableParams" class="table">
    <tbody>
        <tr ng-repeat="document in $data">
            <td data-title="'Year'" sortable="'year'">{{document.year}}</td>
            <td data-title="'Title'" sortable="'title'"><a href="#">{{document.title}}</a></td>
        </tr>
    </tbody>
</table>

视图是一个指令,

angular.module('appDirectives').directive('myModuleDirective', function () {
    // Runs during compile
    return {
        restrict: 'E',
        templateUrl: 'path/to/view.html',
        replace: true,
        controller: function ($scope, $timeout, $filter, TitleList, ngTableParams) {

            $scope.tableParams = new ngTableParams({
                page: 1, // show first page
                count: 10, // count per page
                sorting: {
                    title: 'asc' // initial sorting
                }
            }, {
                total: 0, // length of data
                getData: function ($defer, params) {
                    TitleList.get({}, function (data) {
                        var orderedData = params.sorting() ?
                            $filter('orderBy')(data, params.orderBy()) :
                            data;

                        params.total(orderedData.length);
                        orderedData = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count());
                        $defer.resolve(orderedData);
                    });
                }
            });
        }
    };
4

3 回答 3

2

但是,我还不清楚这个问题,ngTable 的示例使用 v0.3.1,而我使用 v0.3.2。通过开始使用旧版本解决了这个问题。

于 2014-02-27T09:16:12.607 回答
1

我也遇到过这个问题,v0.3.2 中可能有一些错误

我通过用以下行替换 ng-table 代码中的第 502 行来修复这个问题:

var sortingParams = (event && (event.ctrlKey || event.metaKey)) ? $scope.params.sorting() : {};

我不确定这是正确的解决方法(不确定为什么未定义“事件”),但它为我解决了问题。所以请不要把这当作一个合适的解决方案,这只是我的 2 便士。

于 2014-08-29T16:48:28.567 回答
1

我遇到了这个问题,这是一个响应格式问题。
问题是因为,我返回的是一个对象而不是一个数组,例如:

格式错误:

{
"data": {
    "items": { 
        "0": {
            "post_id": "26",
            "post_date": "2015-06-24 00:00:00"

好格式:

{
"data": {
    "items": [
        {
            "id": "26",
            "create_date": "2015-02-19 14:15:44",

该表也适用于对象,但不是所有功能。

于 2015-06-25T11:28:20.700 回答