我正在尝试创建角度服务但收到错误。这是服务:
var app = angular.module('plunker', []);
// Filter Service that returns records with crdamt positive:
app.factory('FilterService', function() {
return function(d) {
var filteredData = [];
console.log(d);
d.forEach(function(item)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData;
}
});
在我的单元测试中,我们得到:
it('should return transactions where credit is positive', function() {
var jsonData = {
"transactions": [{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}, {
"date": "1/1/2002",
"desc": "Transaction",
"cramt": 110,
"dbamt": 10
}]
};
var filteredRecords = FilterService(jsonData);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
});
});
为什么我会收到错误:
TypeError: d.forEach is not a function
答案 0 :(得分:3)
forEach
上提供了 arrays
方法。
查看您的jsonData
,您可以执行此操作:
app.factory('FilterService', function() {
return function(data) {
var filteredData = [];
console.log(data.transactions);
data.transactions.forEach(function(item)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData;
}
});
P.S:请阅读错误消息。它清楚地说d.forEach
不是函数。这就像尝试定义一个对象:
var person = {
'name':'Paul'
};
并尝试访问person.height()
。 height
不是person
对象的属性,而您正尝试访问 undefined property as a function
。
答案 1 :(得分:0)
试试吧。我期待变量d
作为数组。
angular.forEach(d, function(item){
if (item.cramt > 0) {
filteredData.push(item);
}
});
您没有使用角度js的forEach
函数的正确语法。请参阅此angular.forEach指令
答案 2 :(得分:0)
您的测试是尝试过滤整个对象而不是事务数组。
var filteredRecords = FilterService(jsonData);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
});
应该是
var filteredRecords = FilterService(jsonData.transactions);
expect(filteredRecords).toEqual([{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}]);
答案 3 :(得分:0)
请查看更新的plnkr。 forEach仅用于数组,而'd'返回一个对象。
以下是plnkr的链接:
func signup(w http.ResponseWriter, r *http.Request) {
var S Signup
S.name = r.FormValue("name")
S.email = r.FormValue("email")
fmt.Printf("%+v\n", S)
fmt.Fprintf(w, "Form received, you used name: %s", S.name)
}
答案 4 :(得分:0)
你可以用这种方式定义过滤器。
app.factory('FilterService', function() {
return function(d) {
var filteredData = [];
var boolDataISFound = false;
console.log(d.transactions)
d.transactions.forEach(function(item,index)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData[0];
}
});
这是期望
it('should return transactions where credit is positive', function() {
var jsonData = [{
"transactions": [{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}, {
"date": "1/1/2002",
"desc": "Transaction",
"cramt": 110,
"dbamt": 10
}]
}];
var filteredRecords = FilterService(jsonData[0]);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
} );
});
以下是Plunker