Si tengo una matriz de objetos y quiero vincular el modelo angular a una propiedad de uno de los elementos basada en un filtro, ¿cómo hago eso? Puedo explicar mejor con un ejemplo 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
Quiero filtrar la segunda entrada a la asignatura con una calificación 'C', pero no quiero vincular el modelo a la calificación ; Quiero vincularlo con el título de la asignatura que tiene el grado 'C'.
¿Es esto posible y, de ser así, cómo se hace?
filter:{grade:'!'+'C'}
grade array
? En mi caso, construyo mi matriz de calificaciones desde una vista de árbol y quiero filtrar el resultado para aquellos en la matriz.Puede usar el filtro "filtro" en su controlador para obtener todas las calificaciones "C". Obtener el primer elemento de la matriz de resultados le dará el título de la asignatura que tiene la calificación "C".
http://jsbin.com/ewitun/1/edit
Lo mismo con el simple ES6:
fuente
Aquí hay un JSBin modificado con una muestra de trabajo:
http://jsbin.com/sezamuja/1/edit
Esto es lo que hice con los filtros en la entrada:
fuente
tenga en cuenta que si usa $ filter así:
y tuviste otra calificación para, Oh no sé, CC o AC o C + o CCC que los atrae. debe agregar un requisito para una coincidencia exacta:
Esto realmente me mató cuando obtuve algunos detalles de comisiones como este:
solo me llamaron por un error porque estaba introduciendo el ID de comisión 56 en lugar de 6.
Agregar las verdaderas fuerzas una coincidencia exacta.
Aún así, prefiero esto (uso el mecanografiado, de ahí el "Let" y =>):
Lo hago porque, en algún momento en el camino, es posible que desee obtener más información de los datos filtrados, etc., tener la función justo allí deja el capó abierto.
fuente
Si desea crear una lista separada de resultados en el controlador, puede aplicar un filtro
Luego puede hacer referencia a FabSubjects de la misma manera que haría referencia al objeto de resultados
Puedes leer más sobre esto aquí https://docs.angularjs.org/guide/filter
Dado que esta respuesta angular ha actualizado la documentación, ahora recomiendan llamar al filtro
fuente
Puede también utilizar las funciones de
$filter('filter')
:fuente
Si está utilizando ES6, puede:
También tenga en cuenta que el filtro no actualiza la matriz existente, devolverá una nueva matriz filtrada cada vez.
fuente
Aplicando el mismo filtro en HTML con múltiples columnas, solo ejemplo:
fuente