2015-05-29 72 views
0

Angular(以及整个MEAN堆栈)非常新颖。基于值过滤器从数组中选择字段

我有一个MongoDB的数据库收集像这样:

db.users({ 
    username: "Test1", 
    fname: "Bob", 
    lname: "Saget", 
    email: "[email protected]", 
    password: "12345", 
    status: [{ 
     active: false, 
     "non-active": false, 
     suspended: true, 
     "un-confirmed": false, 
     banned: false 
    }] 
}) 

我只是希望打印所有用户的屏幕上。并一直在成功地做到这一点,就像这样。

 <tr ng-repeat="user in users"> 
      <td>{{user.username}}</td> 
      <td>{{user.fname + ' ' + user.lname}}</td> 
      <td>{{user.email}}</td> 
      <td>{{user.password}}</td> 
      <td></td> 
     </tr> 

我试图显示基于布尔值的状态数组的字段(而不是值)的问题。因此,在这个例子中,它会将“暂停”为一个页面而不是“真实”(并且只返回真实值 - 只有一个值)。

我是不是已经成为了对手,还有更好的db结构来坚持这种类型的功能吗?

我尝试过ng-if和ng-repeat与filter:{}选项的组合。

如果需要,我可以提供额外的细节。

你们会怎么做呢?

很多谢谢

+0

angular.forEach循环会在从DB获取用户之后执行。 https://docs.angularjs.org/api/ng/function/angular.forEach –

+0

爱德华,我会把forEach的逻辑放到我的控制器逻辑中,而不是html页面中,就像我在上面已经完成的那样ng-repeat部分? – JGreasley

+0

当然是的,所以在你让$ http获得用户之后,你会对你的用户感兴趣,并且通过这样做获得键/值并在其中设置值。 –

回答

1

得到用户后,你可以通过他们并更新状态这样。

angular.forEach($scope.users, function(a, b){ 
    var user = a; 
    var status = a.status[0]; // <-- because your status are an array we pick the first one. 
    for (var k in status) { 
    if (status.hasOwnProperty(k)) { 
     if (status[k]) { // <-- if status is true then get the key. 
     user.status = k; // <-- set the user status object to the key. 
     } 
    } 
    } 
}); 

您可以更改user.status = k,无论你愿意的话,将其设置为状态覆盖状态数组。

工作实例 - >http://jsbin.com/zarulo/1/edit?html,js,output

希望这有助于!

+0

虽然这并没有完全解决我的问题(这是我自己的解释,缺乏清晰度)你的帖子帮助我克服了这个问题。感谢您的时间和精力。我正在使用您发布的大部分代码。 – JGreasley

+0

没问题,很高兴能帮到你! –