2015-05-29 98 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

沒問題,很高興能幫到你! –