AngularJS - ngRepeat 排序改变数组的长度
AngularJS - ngRepeat sorting changes length of array
JSFiddle:http://jsfiddle.net/WdVDh/101/.
出于某种原因,当我更改 ng-repeat 列表的排序选项时,数组的长度发生变化,并且在我的本地副本中,所有项目都被删除。
我使用了 filters/sorting 的组合,包括一个选项,可以通过链接到 'showLeavers' $filter 指令。
在我的本地副本中,当未选中复选框并且选择了第二个或第三个排序选项时,数组将被清除,因此 ng-repeat 列表中不会出现任何内容,但是当复选框被选中时,或者选择了第一个或第四个排序选项,列表将按应有的方式显示。
显然是代码中某处的问题(我猜是 filter 指令),因为我可以演示类似上面 JSFiddle 中的内容。
HTML:
<md-list-item ng-repeat="employee in employees | orderBy: sortEmployees | filter: searchEmployees | showLeavers:showLeaver">
<md-input-container class="col-xs-12 col-sm-6 col-md-3">
<label>Sort by</label>
<md-select ng-model="allEmployees.sortEmployees">
<md-option selected value="surname">Surname - A to Z</md-option>
<md-option value="-surname">Surname - Z to A</md-option>
<md-option value="forename">Forename - A to Z</md-option>
<md-option value="-forename">Forename - Z to A</md-option>
</md-select>
</md-input-container>
<md-checkbox ng-model="showLeaver">Show Leavers?</md-checkbox>
过滤器:
app.filter('showLeavers', function() {
return function (employees, showLeaver) {
var matches = [];
angular.forEach(employees, function(value) {
matches.push(value);
if (value.leaveDate && !showLeaver) {
matches.splice(value);
}
return matches;
}
})
JSFiddle:http://jsfiddle.net/WdVDh/101/.
出于某种原因,当我更改 ng-repeat 列表的排序选项时,数组的长度发生变化,并且在我的本地副本中,所有项目都被删除。
我使用了 filters/sorting 的组合,包括一个选项,可以通过链接到 'showLeavers' $filter 指令。
在我的本地副本中,当未选中复选框并且选择了第二个或第三个排序选项时,数组将被清除,因此 ng-repeat 列表中不会出现任何内容,但是当复选框被选中时,或者选择了第一个或第四个排序选项,列表将按应有的方式显示。
显然是代码中某处的问题(我猜是 filter 指令),因为我可以演示类似上面 JSFiddle 中的内容。
HTML:
<md-list-item ng-repeat="employee in employees | orderBy: sortEmployees | filter: searchEmployees | showLeavers:showLeaver">
<md-input-container class="col-xs-12 col-sm-6 col-md-3">
<label>Sort by</label>
<md-select ng-model="allEmployees.sortEmployees">
<md-option selected value="surname">Surname - A to Z</md-option>
<md-option value="-surname">Surname - Z to A</md-option>
<md-option value="forename">Forename - A to Z</md-option>
<md-option value="-forename">Forename - Z to A</md-option>
</md-select>
</md-input-container>
<md-checkbox ng-model="showLeaver">Show Leavers?</md-checkbox>
过滤器:
app.filter('showLeavers', function() {
return function (employees, showLeaver) {
var matches = [];
angular.forEach(employees, function(value) {
matches.push(value);
if (value.leaveDate && !showLeaver) {
matches.splice(value);
}
return matches;
}
})