Угловая итерация по JSON

Итак, у меня есть JSON, и я пытаюсь получить всю статистику только для активных пользователей. когда я пытаюсь сделать в цикле что-то вроде этого

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

это не работает... однако прекрасно работает без цикла, пока я получаю только одну запись

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 ответа

Решение

Ничего сложного, просто ваш синтаксис неправильный.

Цикл for должен быть записан так:

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

Т.е. без лишнего $ без лишнего ;, а также нет data внутри Stats,

Смотрите http://jsfiddle.net/4kzzy/176/

Также обратите внимание, что вы можете использовать angular.forEach вместо.

Я не уверен, подходит ли это решение для вашей проблемы, но если вы хотите отображать только активных пользователей, попробуйте этот дизайн:

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

Шоу: 19571

http://jsfiddle.net/Jd2Hw/

Ну, вполне очевидно, что это не сработает, так как нет переменной с именем 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";    
}
Другие вопросы по тегам