Jeśli mam tablicę obiektów i chcę powiązać model Angular z właściwością jednego z elementów na podstawie filtru, jak mam to zrobić? Mogę lepiej wyjaśnić na konkretnym przykładzie:
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>
Kontroler:
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
Chcę odfiltrować drugie wejście do przedmiotu z oceną „C”, ale nie chcę wiązać modelu z oceną ; Chcę to powiązać z tytułem przedmiotu z oceną „C”.
Czy to możliwe, a jeśli tak, to jak to się robi?
filter:{grade:'!'+'C'}
grade array
? W moim przypadku tworzę tablicę ocen z widoku drzewa i chcę przefiltrować wynik dla tych w tablicy.Możesz użyć filtra „filter” w kontrolerze, aby uzyskać wszystkie oceny „C”. Uzyskanie pierwszego elementu tablicy wyników da ci tytuł przedmiotu z oceną „C”.
http://jsbin.com/ewitun/1/edit
To samo dotyczy zwykłego ES6:
źródło
Oto zmodyfikowany JSBin z próbką roboczą:
http://jsbin.com/sezamuja/1/edit
Oto co zrobiłem z filtrami na wejściu:
źródło
uwaga, jeśli używasz $ filter w ten sposób:
i tak się złożyło, że miałeś inną ocenę za, nie wiem, CC lub AC lub C + lub CCC to ciągnie ich do. musisz dołączyć wymaganie dotyczące dopasowania ścisłego:
To naprawdę mnie zabiło, kiedy wyciągałem niektóre szczegóły dotyczące prowizji, takie jak ten:
Zostajesz wezwany tylko z powodu błędu, ponieważ pobierał on identyfikator prowizji 56, a nie 6.
Dokładne dopasowanie prawdziwych sił.
Mimo to wolę to (używam maszynopisu, stąd „Let” i =>):
Robię to, ponieważ w pewnym momencie mógłbym chcieć uzyskać więcej informacji z tych przefiltrowanych danych itp. ... posiadanie tej funkcji powoduje, że maska jest otwarta.
źródło
jeśli chciałeś stworzyć osobną listę wyników w kontrolerze, możesz zastosować filtr
Następnie możesz odwoływać się do failedSubjects w taki sam sposób, jak do obiektu results
możesz przeczytać więcej na ten temat tutaj https://docs.angularjs.org/guide/filter
ponieważ ta odpowiedź angular zaktualizowała dokumentację, teraz zaleca wywołanie filtra
źródło
Możesz także używać funkcji z
$filter('filter')
:źródło
Jeśli używasz ES6, możesz:
Zwróć również uwagę, że filtr nie aktualizuje istniejącej tablicy, za każdym razem zwróci nową przefiltrowaną tablicę.
źródło
Stosowanie tego samego filtru w HTML z wieloma kolumnami, tylko przykład:
źródło