我正在尝试在一个角度应用程序中实现两个函数但是只要我实现过滤器(以字母开头),代码就会停止工作。 (添加/删除)功能本身可以工作,但只要我将数据转换为工厂并尝试使用过滤器功能进行访问就会失败。
工作职能:
$scope.items = items;
$scope.deleteItem = function (index) {
items.data.splice(index, 1);
}
$scope.addItem = function (index) {
items.data.push({
Name: $scope.newItemName
});
}
导致整个事情破裂的原因是什么:
//filtering letters _ NOT WORKING
function setLetters (from, to){
this.fromLetter = from;
this.toLetter = to;
}
//----
$scope.filter.startsWithLetter = function () {
return function (items, fromLetter, toLetter) {
var filtered = [];
for (var i = 0; i < items.length; i++) {
var item = items[i];
var firstLetter = item.Name.substring(0, 1).toLowerCase();
if ((!fromLetter || firstLetter >= fromLetter)
&& (!toLetter || firstLetter <= toLetter)) {
filtered.push(item);
}
}
return filtered;
};
});
// - 过滤字母
此处的完整代码:fiddle
答案 0 :(得分:0)
小提琴中有一些问题。首先,由于第58行额外"Unexpected token )"
,我发现)
错误。
然后当我修复第45行时出现问题,因为您尝试将值分配给$scope.filter.startsWithLetter
时未定义$scope.filter
。我想您要将值分配给$scope.startsWithLetter
。
过滤仍然存在问题。使用ng-repeat
进行过滤时,您可以指定filter或仅a predicate function。在每种情况下,传递给函数的参数都会有所不同 - 请阅读文档。函数as-is旨在用angular.module('myApp', []).filter()
创建的过滤器中使用。当您在作用域上设置它并将其作为谓词函数传递给filter:
时,它不起作用。如果您希望使用范围上的函数进行过滤,而不是创建可重复使用的自定义过滤器,则需要更改它以接受正确的参数 - 请参阅fiddle。
您的网页正在尝试访问setLetters
中的$scope.items.data
,但您未设置$scope.items.data.setLetters
。我认为无论如何在items.data
内设置它是不合理的。也许直接在范围上设置它?我还会直接在范围内设置fromLetter
和toLetter
。
我还在<div ng-controller="ItemsController" >
Fiddle有这些修正