2012-08-12 121 views
19

我有一個包含JSON對象的數組(_users)。如何使用AngularJs過濾JSON數據?

{ 
    "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" 
      } 
     ] 
     } 
    ] 
    } 
} 

1 - 我怎樣纔可以過濾用戶 「主動」: 「1」 而不是 「0」

我已經試過這樣的事情:

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

但不正常工作我。

謝謝!

回答

38

因爲你的對象模型是一種複雜的,我會建議使用自定義過濾功能:

$scope.isActive = function(user) { 
    return user.User.Stats[0].active === "1"; 
}; 

,然後在你的HTML:

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

這裏是工作的jsfiddle:http://jsfiddle.net/pkozlowski_opensource/4kzzy/3/

如果您需要更多信息,請務必查看過濾器的角度文檔:http://docs.angularjs.org/api/ng.filter:filter

+1

這完美的作品。謝謝! – 2012-08-12 15:24:10

+2

上面的答案是完美的,但僅供參考,如果你想在綁定到範圍之前過濾你的數組,你也可以使用jQuery.grep()或_filter from underscore.js http://jsfiddle.net/NRuM7/1/ - jQuery.Grep() http://documentcloud.github.com/underscore/#filter - underscore.js – GFoley83 2013-03-16 04:23:15

3

採取@ pkozlowski.opensource一點,並允許項目/用戶的實時過濾:

http://jsfiddle.net/hbyNN/

<div ng-controller="MyCtrl"> 
    <label>userid substring filter:</label> 
    <input ng-model="zzzzz"> 

    <div ng-repeat="user in _users | filter:isInteresting"> 
     <pre>{{user | json}}</pre> 
    </div> 
</div> 

和:

$scope.isInteresting = function (user) { 
    if ($scope.zzzzz == undefined) { 
     return true; 
    } 

    return user.userid.indexOf($scope.zzzzz) !== -1; 
};