filtro exacto en angular

En Angular, ¿hay alguna manera de modificar el filtro para que solo devuelva coincidencias exactas?

Ejemplo:

var words = [ { title: "ball" }, { title: "wall" }, { title: "all" }, { title: "alloy" } ]; var wordsFiltered = filter('filter') ( words, { 'title': 'all' } ); 

Lo anterior coincidirá con ‘bola’, ‘pared’, ‘todo’ y ‘aleación’. Pero me gustaría que solo coincida con ‘todo’. ¿Alguna forma de cambiarlo?

ACTUALIZAR

A partir de AngularJS v.1.1.3, el filtrado exacto se proporciona de forma nativa :

 Find words that exactly match title:  
and exactly match type:
{{word.title}}

Plunker


Su pregunta implica que desea hacer coincidir varias propiedades de objeto, por lo que aquí hay un filtro que hace eso:

 app.controller('AppController', [ '$scope', function($scope) { $scope.match = {}; $scope.words = [ { title: "ball", type: 'object' }, { title: "wall", type: 'object' }, { title: "all", type: 'word' }, { title: "alloy", type: 'material' } ]; } ] ); app.filter('exact', function(){ return function(items, match){ var matching = [], matches, falsely = true; // Return the items unchanged if all filtering attributes are falsy angular.forEach(match, function(value, key){ falsely = falsely && !value; }); if(falsely){ return items; } angular.forEach(items, function(item){ // eg { title: "ball" } matches = true; angular.forEach(match, function(value, key){ // eg 'all', 'title' if(!!value){ // do not compare if value is empty matches = matches && (item[key] === value); } }); if(matches){ matching.push(item); } }); return matching; } }); 
  Find words that exactly match title:  
and exactly match type:
{{word.title}}

PLUNKER

Prueba esto :

 var words = [ { title: "ball" }, { title: "wall" }, { title: "all" }, { title: "alloy" } ]; var wordsFiltered = filter('filter') ( words, { 'title': 'all' }, true ); 

Puede usar Regex para lograr una implementación simple:

   

En el controlador:

 $scope.myFilter = function (word) { if ($scope.query === '') return true; var reg = RegExp("^" + $scope.query + "$"); return reg.test(word.title); }; 

Yo crearía un nuevo filtro. ¿Es esto lo que quieres?

HTML

 
{{words | exactMatch:'all'}} !

JavaScript

 var myApp = angular.module('myApp',[]); myApp.filter('exactMatch', function() { return function(words, pattern) { var result = []; words.forEach(function (word) { if (word.title === pattern) { result.push(word); } }); return result; } }); function MyCtrl($scope) { $scope.words = [ {title: "ball", other: 1}, {title: "wall", other: 2}, {title: "all", other: 3}, {title: "alloy", other: 4}, {title: "all", other: 5}, ]; } 

JsFiddle: jsfiddle
Más información sobre filtros personalizados: filtros , creación de filtros personalizados y uso de filtros

Si desea utilizar el filtro en JavaScript en lugar de html, debe mirar aquí: jsfiddle

Creé mi propio filtro.

   app.filter('exactMatch', function() { return function(elements, pattern) { var result = []; var fieldSearch = Object.keys(pattern)[0]; elements.forEach(function (element) { if (element[fieldSearch] == pattern[fieldSearch]) { result.push(element); } }); return result; } }); 

angular-filter es una biblioteca útil de filtros.

Uno de sus filtros es el filtro donde hace una coincidencia exacta.