JavaScript - Ordenar resultados con AngularJS

 
Vista:
sin imagen de perfil

Ordenar resultados con AngularJS

Publicado por Alex (6 intervenciones) el 16/08/2017 10:35:59
Hola a todos, a ver si me podéis echar una mano.

Resulta que tengo una sección en mi web que muestra los lectores de una biblioteca.
Esto se visualiza con angular, con sus filtros y esas cosas.
Se puede ordenar crecientemente o decrecientemente pinchando sobre la cabecera, ya sea por nombre, por código, etc

Resulta que tengo que modificarlo para que muestre por defecto, según carga la página, ordenado por el último lector que se ha creado.

Lo que se me ocurrió en principio fue modificar la query de la que saca los datos.
Lo tengo montado sobre un symfony 1.4, así que en el action.class.php, tiene la típica función "executeIndex" con una query, a la que básicamente he agregado un
ORDER BY id;

Los resultados de la query son los que quiero, pero angular no los muestra en el orden que salen ahí.
De hecho, no soy capaz de meter mano al ng-repeat, no parece hacerme caso
No sé si falta o sobra algo. Es lo siguiente:

1
2
<tr ng-repeat="item in data| filter:Buscar:true | filtroNombreNormalizado:nombreFiltro | filtroCodLector:codLector | intervaloFechasAlta:fechaAlta.inicio:fechaAlta.fin | intervaloFechasValidez:fechaValidez.inicio:fechaValidez.fin | mostrarSancionados:tipoSancion | orderBy:sort:reverse | limitTo: (currentPage - 1) * pageSize - filtrados.length | limitTo: pageSize">
  <td ......

Alguien me puede ayudar?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas
Val: 95
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ordenar resultados con AngularJS

Publicado por Vainas (258 intervenciones) el 16/08/2017 18:17:35
Buenas:

Como siempre la documentación de angular puede ayudarte: https://docs.angularjs.org/api/ng/filter/orderBy

Veo que tienes: orderBy:sort:reverse

sort es una variable que le habrás asignado el id para que ordene por id. Mirate el ejemplo de la documentación.

Puedes también montar un ejemplo con los datos que te llegan para que veamos que es lo que sucede.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ordenar resultados con AngularJS

Publicado por Alex (6 intervenciones) el 16/08/2017 20:54:31
Hola
La documentación ya la había mirado, y he posteado porque no sabía por donde seguir.

¿A que te refieres con un ejemplo?
Si te refieres al resultado de la query, los datos da igual como lleguen, le puedo poner un order by id, nombre o lo que sea, que si le pongo una salida se imprimen correctamente, pero en cuanto los coge Angular, siempre los imprime igual.

No sé realmente que hace ese sort, solo sé que si se quita o modifica, no funciona cuando pincho en la cabecera de la tabla, para ordenar creciente o decrecientemente los resultados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 95
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ordenar resultados con AngularJS

Publicado por Vainas (258 intervenciones) el 17/08/2017 23:07:54
Buenas de nuevo:

Dame un ejemplo de como vienen los datos asi se puede meter en una variable y hacer pruebas, es lo unico que se me ocurre.

En la documentacion hay un ejemplo de como se usa el orderBy que es lo que necesitas en "Changing parameters dynamically" en el link que te pase. fijate que en el ejemplo usan esto:

1
<tr ng-repeat="friend in friends | orderBy:propertyName:reverse">

propertyName es una variable que luego se le da valor en el js cada vez que haces click a un boton puede pasar a ser el string 'age' o 'phone' o 'name'. la siguiente variable (reverse) puede ser o true o false para hacer un order asc o desc.

En el ejemplo usan un boton para hacer la ordenacion. desconozco como lo haces tu.

Yo lo entiendo pero no se que es lo que tienes tu en tu codigo. Si puedes pasar al menos los datos te puedo mirar un ejemplo rapido.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ordenar resultados con AngularJS

Publicado por Alex (6 intervenciones) el 18/08/2017 10:39:27
A ver, si le quito lo de
1
orderBy:sort:reverse

Y le pongo
1
orderBy:'-id'

Funciona correctamente, pero en cuanto pongo las dos cosas, adiós.
Y si le quito lo primero, no puedo ordenar haciendo click en las cabeceras creciente o decrecientemente.

Dices que sort es una variable?, lo que encuentro que lleva sort es lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<th class="sf_admin_text">
  <a href="" ng-click="sort = 'codigo';reverse = !reverse"><?php echo __('Código')?></a>
</th>
<th class="sf_admin_text">
  <a href="" ng-click="sort = 'tipo';reverse = !reverse"><?php echo __('Tipo de lector')?></a>
</th>
<th class="sf_admin_text">
  <a href="" ng-click="sort = 'nombre';reverse = !reverse"><?php echo __('Lector')?></a>
</th>
<th class="sf_admin_text">
  <a href="" ng-click="sort = 'curso';reverse = !reverse"><?php echo __('Curso')?></a>
</th>
<th class="sf_admin_text center">
  <a href="" ng-click="sort = 'fechaalta';reverse = !reverse"><?php echo __('F.alta')?></a>
</th>
<th class="sf_admin_text center">
  <a href="" ng-click="sort = 'fechavalidez';reverse = !reverse"><?php echo __('F.validez')?></a>
</th>
<th class="sf_admin_text">
  <a href="" ng-click="sort = 'foto';reverse = !reverse"><?php echo __('Foto')?></a>
</th>

Lo del orden va en un archivo llamado _list.php y lo que acabo de poner en una _list_th_tabular.php
¿Como puedo hacer para sustituir lo del sort ese?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 95
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ordenar resultados con AngularJS

Publicado por Vainas (258 intervenciones) el 18/08/2017 12:32:06
Buenas:

sort es una variable si y le estas asignando un valor cada vez que haces click en un link de esos. Con lo que me pasas pienso que tienes que poner algo asi:

1
2
3
<th class="sf_admin_text">
  <a href="" ng-click="sort = 'id';reverse = !reverse"><?php echo __('ID')?></a>
</th>

El echo __('ID') me lo invento por que no se que traes desde php. asi tendria que funcionarte y ordenar por el id y sacar un nuevo enlace con el id.

Funciona correctamente, pero en cuanto pongo las dos cosas, adiós.

Si quieres hacer pruebas es:

1
orderBy:'id':true

cambia de true a false y veras como hace el asc o desc

Saludos.

Actualizo: y ojo como le pases id ya que no es lo mismo id:1 que id:'1' por que a la hora de hacer comparacion el primero ordena numeros y el segundo strings.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ordenar resultados con AngularJS

Publicado por Alex (6 intervenciones) el 21/08/2017 09:52:19
No, no funciona
El campo ID (que sí existe) no lo quiero mostrar. No obstante, para probarlo lo pongo, según me has dicho tu.
Una vez puesto lo muestra, si hago click, efectivamente lo ordena creciente o decrecientemente mientras esté puesto lo de "orderBy:sort:reverse", pero mientras esté puesto eso, no ordena por el id de manera decreciente, pese a que le ponga "orderBy:'id':true " o lo que sea, ya que parece admitir varios formatos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ordenar resultados con AngularJS

Publicado por Alex (6 intervenciones) el 21/08/2017 10:11:38
Es que no sé si queda claro que deseo las dos funcionalidades
Que por defecto esté ordenado por id decreciente, pero si haces click en las caberas de código, nombre, fecha, etc, cambie su orden
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar