2016-08-30 2 views
0

У меня есть некоторые данные о тревоге в моем списке, и я хочу их отфильтровать на основе какого-то условия, например, если в одном месте есть несколько аварийных сигналов типа pull_Alarm и Emergency_alarm, тогда отдайте приоритет аварийная сигнализация.Как фильтровать данные с более чем одним условием

Here is my list: 
[ 
    { 
     alarmType:"Normal_ALARM" 
     location:"Ward5" 
     severity:"URGENT" 
    }, 
    { 
     alarmType:"Emergency_Alarm 
     location:"Ward1" 
     severity:"URGENT" 
    }, 
    { 
     alarmType:"PULL_Alarm" 
     location:"Ward1" 
     severity:"NORMAL" 
    } 
] 

Что я хочу список после того, как фильтр должен быть только

[ 
    { 
    alarmType:"Normal_ALARM" 
    location:"Ward5" 
    severity:"URGENT" 
    }, 
    { 
    alarmType:"Emergency_Alarm 
    location:"Ward1" 
    severity:"URGENT" 
    } 
] 

Может кто-то предложить мне, как я могу применить фильтр на этих условиях.

+1

Возможный дубликат http://stackoverflow.com/questions/18792039/angularjs-multiple-filter-with-custom-filter-function –

ответ

0

Создайте один фильтр с корпусами переключателей или добавьте, если еще условия.

.filter("alarmFilter", function() { 
    // write condition what ever you want to add 
}); 

И примените этот фильтр к своему выражению, в котором вы хотите применить условие.

0

Написать фильтр

$scope.filter1 = function(item) 
    { 
     return (item.severity == 'URGENT'); 
    }; 

, а затем использовать его

<div ng-repeat="item in object| filter:filter1">{{item.alarmType}}</div> 

JSFIDDLEhttp://jsfiddle.net/Lvc0u55v/8866/

+0

Как я могу отфильтровать внутри контроллера, а не использовать для фильтрации записей в HTML ? –

+0

Вы можете сделать это таким образом http://jsfiddle.net/Lvc0u55v/8871/ – COSTADOR

0

Вы можете создать собственный фильтр, как показано ниже.

angular.module('myFilters', []). 
filter('byAlarmCount', function() { 
    return function(alarms, severity) { 
    var items = { 
     severity: severity, 
     out = [] 
    }; 
    angular.forEach(alarms, function(v, k)) { 
     if (this.severity[v.severity] === true) { 
      this.out.push(v); 
     } 
     } 
    return items.out; 
    } 
}); 

DOM, как показано ниже

<ul> 
    <li ng-repeat="alarm in list | byAlarmCount:severityFilter">{{alarm.location}: {{alarm.alarmType}}</li> 
</ul> 
0

Если вы хотите сделать некоторые сложные фильтры, то его лучше смотреть на некоторых сторонних JS библиотек, таких как lodash (https://lodash.com/) или подчеркивание (http://underscorejs.org/).

Они предоставляют широкий спектр утилит, которые могут использоваться для фильтрации, сопоставления и других общих функций полезности.

Например, для этого сценария вы можете использовать _.where/_.filter из underscorejs.

var filteredAlarms = _.where(<YOUR LIST>, { severity: NORMAL, alarmType: ...}); 
+0

Вы можете использовать _.where (...) внутри вашего контроллера, вам нужен только файл underscore.js, который уже был введен. Есть способы сделать это как услугу, чтобы вы без труда работали внутри своих контроллеров, мой любимый - https://solidfoundationwebdev.com/blog/posts/how-to-use-underscore-in-your-angularjs -controllers – M22an

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