Se eu tenho uma matriz de objetos e quero vincular o modelo Angular a uma propriedade de um dos elementos com base em um filtro, como faço isso? Eu posso explicar melhor com um exemplo concreto:
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>
Controlador:
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
Quero filtrar a segunda entrada para o assunto com uma nota 'C', mas não quero vincular o modelo à nota ; Quero vinculá-lo ao título do assunto que tem o grau 'C'.
Isso é possível? Em caso afirmativo, como é feito?
filter:{grade:'!'+'C'}
grade array
? No meu caso, eu construo minha matriz de notas a partir de uma visualização em árvore e quero filtrar o resultado para aqueles na matriz.Você pode usar o filtro "filter" no seu controlador para obter todas as notas "C". Obter o primeiro elemento da matriz de resultados fornecerá o título do assunto com a classificação "C".
http://jsbin.com/ewitun/1/edit
O mesmo com o ES6 simples:
fonte
Aqui está um JSBin modificado com uma amostra de trabalho:
http://jsbin.com/sezamuja/1/edit
Aqui está o que eu fiz com os filtros na entrada:
fonte
observe que, se você usar $ filter assim:
e você passou a ter outra nota para Oh, não sei, CC ou AC ou C + ou CCC que as atrai. você precisa anexar um requisito para uma correspondência exata:
Isso realmente me matou quando eu estava puxando alguns detalhes da comissão como este:
só é chamado para um bug porque estava inserindo o ID da comissão 56 em vez de 6.
Adicionar as verdadeiras força uma correspondência exata.
Ainda assim, eu prefiro isso (eu uso o texto datilografado, daí o "Let" e =>):
Faço isso porque, em algum momento no caminho, talvez eu queira obter mais informações desses dados filtrados, etc ... ter a função ali dentro, meio que deixa o capô aberto.
fonte
se você quiser criar uma lista separada de resultados no controlador, poderá aplicar um filtro
Em seguida, você pode fazer referência a failSubjects da mesma maneira que referenciaria o objeto de resultados
você pode ler mais sobre isso aqui https://docs.angularjs.org/guide/filter
como esta resposta angular atualizou a documentação, eles agora recomendam chamar o filtro
fonte
Você também pode usar funções com
$filter('filter')
:fonte
Se você estiver usando o ES6, poderá:
Além disso, observe que o filtro não atualiza a matriz existente; ela retornará uma nova matriz filtrada sempre.
fonte
Aplicando o mesmo filtro em HTML com várias colunas, apenas um exemplo:
fonte