Dentro do meu controlador, gostaria de filtrar uma série de objetos. Cada um desses objetos é um mapa que pode conter strings, bem como listas
Tentei usar o $filter('filter')(array, function)
formato, mas não sei como acessar os elementos individuais do array dentro da minha função. Aqui está um trecho para mostrar o que eu quero.
$filter('filter')(array, function() {
return criteriaMatch(item, criteria);
});
Em seguida criteriaMatch()
, verificarei se cada uma das propriedades individuais corresponde
var criteriaMatch = function(item, criteria) {
// go thro each individual property in the item and criteria
// and check if they are equal
}
Tenho que fazer tudo isso no controlador e compilar uma lista de listas e defini-las no escopo. Portanto, preciso acessar $filter('filter')
apenas desta forma. Todos os exemplos que encontrei na rede até agora têm pesquisas de critérios estáticos dentro da função, eles não passam um objeto de critério e testam contra cada item do array.
fonte
Respostas:
Você pode usá-lo assim: http://plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p=preview
Como você descobriu,
filter
aceita a função de predicado que aceita item por item do array. Então, você só precisa criar uma função de predicado baseada no dadocriteria
.Neste exemplo,
criteriaMatch
é uma função que retorna uma função de predicado que corresponde ao dadocriteria
.modelo:
escopo:
fonte
filter
método nativo no objeto Array:array.filter(function(item){return item.name === criteria.name;})
Aqui está um exemplo de como você usaria
filter
em seu JavaScript AngularJS (em vez de em um elemento HTML).Neste exemplo, temos uma matriz de registros de país, cada um contendo um nome e um código ISO de 3 caracteres.
Queremos escrever uma função que irá pesquisar nesta lista por um registro que corresponda a um código específico de 3 caracteres.
Veja como faríamos isso sem usar
filter
:Sim, nada de errado com isso.
Mas aqui está como a mesma função ficaria, usando
filter
:Muito mais puro.
Lembre-se de que
filter
retorna uma matriz como resultado (uma lista de registros correspondentes), portanto, neste exemplo, queremos retornar 1 registro ou NULL.Espero que isto ajude.
fonte
Além disso, se você quiser usar o filtro em seu controlador da mesma forma que faria aqui:
Você poderia fazer algo como:
fonte
var filteredItems = $filter('criteriaMatch')(items, criteria);