2014-12-28 5 views
0

У меня есть список ng-repeat, отображающий коллекцию объектов. Я реализовал фильтр, который отображает список только те объекты, которые были вставлены сегодня. Это выглядит так:Фильтр нескольких условий в AngularJS

<div class="row msf-row" 
    ng-repeat="record in recordlist | filter: record.date = dateJson"> 

Это прекрасно работает. Моя проблема в том, что я хочу показать оба объекта, записанные сегодня, а также записи, которые не имеют прихода собственности (поскольку они, возможно, были представлены вчера, но они должны быть отмечены как прибывшие).

Я пробовал это, но до сегодняшнего дня в 00.00 не знаю, правильно ли это.

<div class="row msf-row" 
    ng-repeat="record in recordlist | 
       filter: record.date = dateJson || 
         record.date != dateJson && !record.arrival"> 

Имеет ли это смысл?

ответ

1

Когда выражения в вашей разметке начнут перегружаться, пришло время рефакторинга. Вы должны определить функцию в контроллере, который выполняет проверку, что вы хотите:

$scope.shouldShow = function(record) { 
    return record.date == dateJson || 
      (recode.date != dateJson && !record.arrival); 
} 

(примечание: это условие является излишним, вы можете сократить его до):

return record.date == dateJson || !record.arrival; 

Затем используйте, что в ваш фильтр:

<div class="row msf-row" ng-repeat="record in recordlist | filter:shouldShow"> 

Это позволит вам обновить логику без редактирования вашего вида.

+0

Я не могу заставить его работать. Условия должны быть, покажите мне только записи, которые либо имеют сегодняшнюю дату (dateJson), либо не имеют record.arrival (record.arrival = ''), независимо от даты. Что мне не хватает? –

+0

Что вы имеете в виду, когда говорите, что не можете заставить его работать? Какой результат вы получаете? Кстати, вы, кажется, используете '=', где вы должны использовать '===' (или, возможно, '=='). Вы знаете разницу между этими, верно? – JLRishe

+0

Отфильтровывает все (без результатов). Может быть, проблема в том, что record.arrival существует, но пуста? –

0

Если вы хотите создать собственный фильтр, вы можете попробовать это. Здесь я предполагаю, что
app = angular.module('yourModuleName', []) или app = angular.module('yourModuleName') (позже, упаковывают вы уже инстанцирован ваш модуль перед)

<div class="row msf-row" ng-repeat="record in recordlist | customFilter:dateJson"> 

app.filter('customFilter', function(){ 
    return function(records, dateJson){ 
     return records.filter(function(item, index, array){ 
      return item.date == dateJson || (item.date != dateJson && !item.arrival); 
     }); 
    } 
}) 

Отказ от ответственности: я не проверял этот код.