我是AngularJS的新手,但到目前为止,我已经能够把所有东西都包裹起来。但OrderBy正在引起我的问题。而且我还没有发现像我这样的问题。我有一种感觉,那是因为我错过了$范围以及orderBy的实际工作方式。AngularJS OrderBy自定义函数
我正在创建一个列表,该列表将显示今年NaNoWriMo在我所在地区的作家。我已将用户分为工厂,并将其显示出来。但是,我有问题让他们排序。名称和Wordcount排序没有问题。但是“计算平均字数”根本没有排序。它甚至不会调用我为它制作的功能。
这是我的简化布局,以及JSFiddle setup (updated)。
JS:
(function() {
var app = angular.module('userList', []);
app.controller('ListController', ['$scope',
function ($scope) {
$scope.users = userData;
$scope.day = 30;
$scope.avgWords = function (user) {
return Math.floor(user.wordcount/$scope.day);
};
$scope.sort = "name";
$scope.sortRev = false;
$scope.sortChange = function (field) {
if ($scope.sort === field) {
$scope.sortRev = !$scope.sortRev;
return;
}
$scope.sort = field;
$scope.sortRev = false;
};
$scope.sortAvg = function (user) {
alert("sorted!");
return Math.floor(user.wordcount/$scope.day);
};
}]);
var userData = [{
"name": "Kris",
"wordcount": 42382
}, {
"name": "Tim",
"wordcount": 60120
}, {
"name": "Elsa",
"wordcount": 150675
}];
})();
HTML:
<div ng-controller="ListController">
<table>
<thead>
<tr>
<th ng-click="sortChange('name');">Username</th>
<th ng-click="sortChange('wordcount');">Total Words</th>
<th ng-click="sortChange('sortAvg');">Average WPD</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="user in users | orderBy:sort:sortRev">
<td>{{user.name}}</td>
<td>{{user.wordcount}}</td>
<td>{{avgWords(user)}}</td>
</tr>
</tbody>
</table>
啊,我错过了。这应该是这样设置的。 [这是更新的小提琴](http://jsfiddle.net/btronk/6dma7yhc/1/)。但问题仍然是一样的。我将点击设置为sortChange('sorgAvg')以与该函数相对应,但它从来没有被调用过。 – 2014-10-16 16:59:06
现在我明白我在做什么。你是对的。问题在于调用sortChange('avgWords')和sortChange(avgWords)之间的区别。一个寻找属性,另一个寻找一个功能。这一次,这是由两个''造成的!谢谢。 – 2014-10-16 17:15:52
为了确实准确,其他人并没有专门针对某个功能。无论类型是什么,它都会查找名为avgWords的当前作用域的属性。 – 2014-10-16 19:08:43