我有一个复杂的JSON结构如下:
我的JSON对象就像 -
$scope.data = {
"Test 1": [
{
"paperName": "Physics Test",
"lkExamTypePk": 1,
"paperPK": "20",
"lkExamType": 2
}
],
"Test 2": [
{
"paperName": "Maths Test",
"lkExamTypePk": 2,
"paperPK": "23",
"lkExamType": 3
}
]
}
我正在使用这个json在我的html页面中显示并想要搜索测试1,测试2等的键:
<input ng-model="filter.key" />
<table>
<tr ng-repeat="(key,val) in controllerName.data | filter:filter.key">
<td>
{{key}}
</td>
</tr>
</table>
但问题是过滤器在数组和JSON的值上工作,我得到的错误不是数组。
我在控制台上遇到的错误
错误:[filter:notarray]
答案 0 :(得分:2)
我认为你的问题在于如何引用你的变量。我可以看到你将data
数组声明为$scope
变量
$scope.data = { ... }
然后,您尝试使用
参考您的控制器来访问它controllerName.data
您可以遵循两种不同的方法,但不能将它们混合使用。
1)$ scope variabile
如果您想加入$scope
,您必须在控制器中声明您的变量,如下所示:
$scope.data = { ... }
然后进入html你必须像这样引用它(没有controllerName):
<tr ng-repeat="(key,val) in data | filter:filter.key">
2)控制器范围
如果你想进入控制器的范围,你必须在你的控制器中声明你的变量如下:
this.data = { ... }
然后进入html你可以像这样引用它:
<tr ng-repeat="(key,val) in controllerName.data | filter:filter.key">
<强>提示强>
通常情况下,当您收到引用变量的错误时,最佳做法是将变量的数据打印到html中以检查您是否正在使用它,例如:
<pre>{{ data | json }}</pre>
尝试使用数组而不是对象
您可以尝试使用json对象的数组intead,如错误所示,如下所示:
$scope.data = [
"Test 1": [{
"paperName": "Physics Test",
"lkExamTypePk": 1,
"paperPK": "20",
"lkExamType": 2
}],
"Test 2": [{
"paperName": "Maths Test",
"lkExamTypePk": 2,
"paperPK": "23",
"lkExamType": 3
}]
]