angularjs - 使用 AngularJs 的可排序表格列

标签 angularjs angularjs-ng-repeat

我正在尝试对从 JSON 源填充的数据表进行排序。我的代码如下:

HTML:

<div ng-app="myApp">
    <div ng-controller="PurchasesCtrl">
        <table cellspacing="0">
            <tr class="first">
                <th class="first" ng:click="changeSorting(purchases.date)">Date</th>
                <th ng:click="changeSorting(purchases.text)">Description</th>
                <th ng:click="changeSorting(purchases.price)">Amount</th>
                <th ng:click="changeSorting(purchases.availability)">Status</th>
            </tr>
            <tr ng-repeat="purchase in purchases.data">
                <td class="first">{{purchase.date}}</td>
                <td>{{purchase.text}}</td>
                <td>{{purchase.price}}</td>
                <td>{{purchase.availability}}</td>
            </tr>
        </table>
    </div>
</div>

JS:
var myApp = angular.module("myApp",[]);

myApp.factory("Purchases", function(){
    var Purchases = {};

    Purchases.data = [
        {
            date: "10/05/2012",
            text: "1 Lorem ipsum dolor sit amet ipsum dolor",
            price: "£123.45",
            availability: "1 Available until 10th Dec 2013"
        },
        {
            date: "24/05/2012",
            text: "2 Lorem ipsum dolor sit amet ipsum dolor",
            price: "£234.56",
            availability: "2 Available until 10th Dec 2013"
        },
        {
            date: "20/05/2012",
            text: "3 Lorem ipsum dolor sit amet ipsum dolor",
            price: "£345.67",
            availability: "3 Available until 10th Dec 2013"
        }
    ];
    return Purchases;
});

function PurchasesCtrl($scope, Purchases){
    $scope.purchases = Purchases;

    $scope.changeSorting = function(column) {
        var sort = $scope.sort;

        if (sort.column == column) {
            sort.descending = !sort.descending;
        } else {
            sort.column = column;
            sort.descending = false;
        }
    };
}

fiddle :http://jsfiddle.net/7czsM/1/

如您所见,我已尝试向表标题添加一个单击函数以调用对数据进行排序的函数,但它不起作用。

我已经看到了这种工作的例子,在这里:http://jsfiddle.net/vojtajina/js64b/14/ ,但是当我尝试将同样的事情应用到我的场景时,它很快就会崩溃;例如,我尝试通过添加以下内容以编程方式在 JSON 中添加表头:
var Purchases = {};

Purchases.head = [
        {
            date: "Date",
            text: "Text column",
            price: "Price column",
            availability: "Availability column"
        }

    Purchases.data = [
        {
            date: "10/05/2012",
            text: "1 Lorem ipsum dolor sit amet ipsum dolor",
            price: "£123.45",
            availability: "1 Available until 10th Dec 2013"
        },

这只是阻止了任何工作,但我认为可以将多组数据添加到 Angular 变量中?

我完全是 Angular 的新手,所以我真的坚持这个。任何指针将不胜感激,谢谢。

最佳答案

更新了 jsfiddle:http://jsfiddle.net/gweur/

sza 是对的,您确实忘记了 $scope.sort 对象,但是您也缺少 ng-repeat 中的 orderBy 过滤器

|orderBy:sort.column:sort.descending

此外,您需要将列名显式传递给 changeSorting() 函数,例如
ng-click="changeSorting('text')"  

不确定是否有不同的方法可以处理这个问题。

最后,ng-click 是您使用的 AngularJS 版本的正确语法。

关于angularjs - 使用 AngularJs 的可排序表格列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18789973/

相关文章:

javascript - ng-repeat 显示空表行

c# - 如何在下拉列表中添加 "ng-model"?

javascript - 在移动 Safari 中更好/更快地滚动?

javascript - AngularJS:自定义指令不适用于 dirPagination

angularjs - 将当前的 Angular.JS 迭代器传递到表单提交的函数中?

javascript - 如何循环遍历angularjs中的对象数组

javascript - 将项目添加到模型并刷新第二次 ng-repeat

angularjs - Angular ng-repeat 按格式化日期过滤/搜索

angularjs - 找不到按钮的元素

javascript - A 帧淡出基元