2015-05-29 2 views
0

Очень новый для углового (и всего стека 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 с фильтром: {} options.

При необходимости я могу предоставить дополнительную информацию.

Как бы вы так поступили?

Большое спасибо

+0

угловой.forEach цикл будет делать после получения пользователей из БД. https://docs.angularjs.org/api/ng/function/angular.forEach –

+0

Эдвард, я бы поставил логику forEach в свою логику контроллера, а не на html-страницу, как я уже делал выше в ng-repeat part? – 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

Без проблем, рад, что я мог бы помочь! –

Смежные вопросы