角度迭代json

时间:2014-01-08 05:20:33

标签: angularjs angularjs-scope

所以我有一个json,我试图只为活跃用户获取所有统计数据。当我尝试做一个像这样的for循环时

for(var i=0; i < user.User.Stats.data.length; $i++;){
            return user.User.Stats[i].active === "1";    
}

它不起作用......但是只要我只获得一条记录

,就可以在没有for循环的情况下正常工作
return user.User.Stats[i].active === "1"; 

这是我的HTML

<div ng-controller="MyCtrl">
<div ng-repeat="user in _users | filter:isActive">
    {{user.User.userid}}
</div>
</div>

这是我的js

var myApp = angular.module('myApp', []);

function MyCtrl($scope) {

    $scope.isActive = function(user) {
       // for(var i=0; i < user.User.Stats.data.length; $i++;){
            return user.User.Stats[0].active === "1";    
       // }

    };

    $scope._users = [
        {
        "User": {
            "userid": "19571",
            "status": "7",
            "active": "1",
            "lastlogin": "1339759025307",
            "Stats": [
                {
                "active": "1",
                "catid": "10918",
                "typeid": "71",
                "Credits": [
                    {
                    "content": "917,65",
                    "active": "1",
                    "type": "C7"},
                {
                    "content": "125,65",
                    "active": "1",
                    "type": "B2"}
                ]},
                                {
                "active": "1",
                "catid": "10918",
                "typeid": "71",
                "Credits": [
                    {
                    "content": "917,65",
                    "active": "1",
                    "type": "C7"},
                {
                    "content": "125,65",
                    "active": "1",
                    "type": "B2"}
                ]}
            ]
        }}];
}

这是演示链接http://jsfiddle.net/4kzzy/174/

3 个答案:

答案 0 :(得分:12)

没有什么复杂的,只是你的语法错误。

for循环需要像这样写:

for(var i=0; i < user.User.Stats.length; i++)

即。没有多余的$,没有多余的;data内也没有Stats

请参阅http://jsfiddle.net/4kzzy/176/

另请注意,您可以使用angular.forEach代替。

答案 1 :(得分:8)

我不确定它是否适合您的问题,但如果您只想显示活跃用户,请尝试以下设计:

<div ng-controller="MyCtrl">
<div ng-repeat="user in _users | filter:{User.active:1}">
        {{user.User.userid}}
</div>
</div>

显示: 19571

http://jsfiddle.net/Jd2Hw/

答案 2 :(得分:2)

嗯,很明显它不会起作用,因为data路径中没有名为user.User.Stats的变量。似乎缺少部分业务逻辑。什么时候应该过滤掉用户?如果他们没有Stats,或Stats数组中的所有单元格都有active === 1的记录? 要查看Stats数组中的所有单元格,正确的语法是:

for(var i=0; i < user.User.Stats.length; $i++;){
    var singleCell = user.User.Stats[i];
    // singleCell.active === "1";    
}