我从服务器接收对象如下:
Object {
0: "girl night",
1: "martini",
2: "burger",
3: "folk",
4: "laughter house"
}
使用ng-repeat它可以正常显示但是当我用户过滤或orderBy时,我收到此错误。
<ion-list> <ion-item ng-repeat="item in MyKeyword" ng-click="changeText(item)">{{item}}</ion-item> </ion-list>
ionic.bundle.js:25642错误:[filter:notarray]预期的数组但是 收到:{&#34; 0&#34;:&#34;女孩 夜&#34;&#34; 1&#34;:&#34;马提尼&#34;&#34; 2&#34;:&#34;汉堡&#34;&#34; 3&#34 ;: &#34;民间&#34;,&#34; 4&#34;:&#34;笑声家&#34;}
如何使用过滤器正常工作?
答案 0 :(得分:1)
错误本身明确提到了原因。你不能通过json对象进行迭代。理想情况下,你的反应应该是[&#34;女孩之夜&#34;,&#34;马提尼&#34;,&#34;汉堡&#34;,&#34;民间&#34;,&#34;笑声家& #34;]以此方式工作。
如果您不想更改服务响应格式。然后,像这样迭代。
<ion-list> <ion-item ng-repeat="(key, value) in MyKeyword" ng-click="changeText(value)">{{value}}</ion-item> </ion-list>
答案 1 :(得分:1)
我尝试生成可以模拟您想要实现的快速代码。
<!DOCTYPE html>
<html ng-app>
<body>
<div ng-init="data={'0': 'first', '1': 'second', '2': 'third'}">
<li ng-repeat="item in data">{{item}}</li>
</div>
<hr />
<div ng-init="data=['first', 'second', 'third']">
<li ng-repeat="item in data">{{item}}</li>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
</body>
</html>
在我看来你的迭代很好。您可以使用ng-repeat
遍历数组或对象。
从您的代码中我无法看到您实际使用过滤器的位置,因此不会真正知道出了什么问题。
然而,提示是javascript数组实际上是对象,具有其他方法和属性,例如:forEach
或length
。我的假设是你的过滤器,无论它在哪里,无论它做什么,都试图迭代数组。
在那种情况下 之前你使用它,你可以将你的对象转换为带有这段代码的数组。
var arr = [];
for (var item in object) {
arr.push(object[item]);
}
或者,如果您还想存储索引,则需要对象数组。你可以用这个来实现它:
var arr = [];
for (var item in object) {
arr.push({ id: item, value: object[item] });
}
使用完阵列后,请对其进行过滤。
来自HTML的
如果您想从HTML级别执行此操作,可以ng-repeat
使用key
value
语法。
<ion-item ng-repeat="(key, value) in MyKeyword">{{value}}</ion-item>
希望它有所帮助。
答案 2 :(得分:0)
您可以将给定的对象转换为数组,然后就可以对其进行ng-repeat。
JS中的:
<ion-list> <ion-item ng-repeat="item in convertedToArray" ng-click="changeText(item)">{{item}}</ion-item> </ion-list>
HTML中的:
{{1}}
答案 3 :(得分:0)
仅过滤支持数组,但显然您的服务器返回对象。所以你必须将对象转换为数组。
执行此转换的一种简单方法是使用underscore.js。像:
_。values({one:1,two:2,three:3}); =&GT; [1,2,3]
所以情景是这样的 1使您自己的过滤器可能命名为toArray,在过滤器中使用下划线转换为数组并返回。 2使用普通过滤器再次过滤。 3模板看起来像:
ng-repeat =“MyKeyword中的项目| toArray | filter:xxx”