带有两个参数的AngularJs自定义orderBy

带有两个参数的AngularJs自定义orderBy,angularjs,Angularjs,我在创建自定义orderBy筛选器的正确语法方面遇到问题。如果需要一个参数(在ng repeat中迭代的项),我没有问题。如何传递第二个参数。我试过: <div ng-repeat="item in items | orderBy:myCustomSort:mySecondParameter"></div> 但是,如果我在myCustomSort函数中设置了一个中断,则mySecondParameter是未定义的。此外,还可以使用orderBy反转顺序,如果是,

我在创建自定义orderBy筛选器的正确语法方面遇到问题。如果需要一个参数(在ng repeat中迭代的项),我没有问题。如何传递第二个参数。我试过:

  <div ng-repeat="item in items | orderBy:myCustomSort:mySecondParameter"></div>

但是,如果我在myCustomSort函数中设置了一个中断,则mySecondParameter是未定义的。此外,还可以使用orderBy反转顺序,如果是,则将“reverse”参数粘贴到何处

谢谢。

请看:。orderBy筛选器的参数可以是字符串、函数或数组。所以你可以写:

<div ng-repeat="item in items | orderBy:[myCustomSort,mySecondParameter]"></div>

按两个属性对数据进行排序


例如,请看这个提琴:如果单击“年龄”,您可以看到数据按名称排序,然后按年龄排序。

我找不到将附加参数传递到排序函数的解决方案。相反,我只是创建了一个appendItemFilter,它接受我想在customSort中引用的参数,并将其附加到每个项。然后我可以直接在项目中引用它。 因此:


您可以创建自定义筛选器以按多个键进行筛选

在js文件中:-

App.filter('multiOrderBy', ["$filter", function ($filter) {
return function (items, key1, key2) {
    var newItems = [];
    if(!items || !items.length)
        return newItems;
    function sortKey1(obj) {
        return obj[key1].toLowerCase();
    }
    function sortKey2(obj) {
        return obj[key2].toLowerCase();
    }
    if(key1)
        newItems = $filter('orderBy')(items, sortKey1);
    if(key2)
        newItems = $filter('orderBy')(newItems, sortKey2);
    return newItems;
  }
}]);
在HTML中:-

<div ng-repeat="item in items | multiOrderBy: 'name': 'category'"></div>
因此,过滤后,阵列将:-

$scope.items = [
        {"name":"Blue", "category":"Color"},
        {"name":"red", "category":"Color"},
        {"name":"ABC", "category":"Project"},
        {"name":"xyz", "category":"Project"}
    ];

谢谢,但是……您的双字段排序示例与带有参数的customSort函数不同。当然,我总是看医生。这把小提琴是我问题的一个直接例子:。此外,您的示例伪代码将无法工作…由函数和参数组成的数组。尝试一下。您可以在控制器的$scope上为第二个参数声明一个变量,并将其绑定到视图上的某种输入,而不是向ng repeat添加一个额外的参数:$scope.sortBy=someParamToSortBy;//例如:“价格”、“名称”等。。。然后,您的自定义orderBy函数可以只访问$scope.sortBy,而不传入第二个参数$scope.mySortFunction=函数(项){return(项[$scope.sortBy]);};
$scope.items = [
        {"name":"ABC", "category":"Project"},
        {"name":"xyz", "category":"Project"},
        {"name":"red", "category":"Color"},
        {"name":"Blue", "category":"Color"}
    ];
$scope.items = [
        {"name":"Blue", "category":"Color"},
        {"name":"red", "category":"Color"},
        {"name":"ABC", "category":"Project"},
        {"name":"xyz", "category":"Project"}
    ];