Если у меня есть массив объектов, и я хочу привязать модель Angular к свойству одного из элементов на основе фильтра, как мне это сделать? Я могу лучше объяснить на конкретном примере:
HTML:
<!DOCTYPE html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body ng-controller="MyCtrl">
<input ng-model="results.year">
<input ng-model="results.subjects.title | filter:{grade:'C'}">
</body>
</html>
контроллер:
function MyCtrl($scope) {
$scope.results = {
year:2013,
subjects:[
{title:'English',grade:'A'},
{title:'Maths',grade:'A'},
{title:'Science',grade:'B'},
{title:'Geography',grade:'C'}
]
};
}
JSBin: http://jsbin.com/adisax/1/edit
Я хочу , чтобы фильтровать второй вход к предмету с класса «C», но я не хочу , чтобы связать модель в классе ; Я хочу привязать его к названию предмета с оценкой «С».
Возможно ли это, и если да, то как это делается?
filter:{grade:'!'+'C'}
grade array
? В моем случае я строю свой массив оценок из древовидной структуры и хочу отфильтровать результат для тех, кто находится в массиве.Вы можете использовать фильтр «фильтр» в вашем контроллере, чтобы получить все оценки «C». Получение первого элемента массива результатов даст вам название предмета с оценкой «C».
http://jsbin.com/ewitun/1/edit
То же и с простым ES6:
источник
Вот модифицированный JSBin с рабочим образцом:
http://jsbin.com/sezamuja/1/edit
Вот что я сделал с фильтрами на входе:
источник
обратите внимание, если вы используете $ filter следующим образом:
и у вас случайно была другая оценка, о, я не знаю, CC, AC, C + или CCC, она их привлекает. вам нужно добавить требование для точного соответствия:
Это действительно убило меня, когда я вытащил некоторые детали комиссии вроде этого:
вызвали только за ошибку, потому что она вытаскивала идентификатор комиссии 56, а не 6.
Добавление истинных сил точного совпадения.
Тем не менее, я предпочитаю это (я использую машинописный текст, отсюда «Let» и =>):
Я делаю это, потому что в какой-то момент мне может понадобиться получить дополнительную информацию из этих отфильтрованных данных и т.д ... наличие функции прямо там как бы оставляет капот открытым.
источник
если вы хотите создать отдельный список результатов в контроллере, вы можете применить фильтр
Затем вы можете ссылаться на failedSubjects так же, как и на объект результатов.
вы можете прочитать об этом здесь https://docs.angularjs.org/guide/filter
поскольку этот ответ angular обновил документацию, теперь они рекомендуют вызывать фильтр
источник
Если вы используете ES6, вы можете:
Также обратите внимание, что фильтр не обновляет существующий массив, он будет каждый раз возвращать новый фильтрованный массив.
источник
Вы также можете использовать функции с
$filter('filter')
:источник
Применение того же фильтра в HTML с несколькими столбцами, просто пример:
источник