Ng-table: la paginación no funciona con datos personalizados del archivo json

Creado en 2 ago. 2016  ·  10Comentarios  ·  Fuente: esvit/ng-table

Estoy usando datos personalizados del archivo .json y quiero paginar los datos, pero todos los datos vienen en una sola página; ¿porque? abajo esta mi codigo

 $http.get('app/user_keys.json').success(function(data) {
            vm.data = data;
            vm.tableParams = new NgTableParams({ page: 1, count: 2 }, {
                    total: vm.data.length,
                    getData: function (params) {
                        console.log(vm.data.length);
                        var deferred = $q.defer();
                        var orderedData = params.sorting() ? $filter('orderBy')(vm.data, params.orderBy()) : vm.data;
                        deferred.resolve(orderedData.slice((params.page() - 1) * params.count(),  params.page() * params.count()));
                    }
                });
        });
<table ng-table="vm.tableParams" class="table table-striped" >
                    <colgroup>
                          <col width="5%"/>
                          <col width="30%"/>
                          <col width="50%"/>
                          <col width="15%"/>
                    </colgroup>
                    <tr ng-repeat="row in vm.data | filter: searchText  track by $index">
                        <td header="'headerCheckbox.html'">
                        <input type="checkbox" value="row._id" ng-model="vm.checkboxes.items[row._id]" ></td>
                        <td data-title="'ID'">{{ row.index }}</td>
                        <td data-title="'Cloud Location'">{{ row.location }}</td>
                        <td data-title="'Action'"><i class="fa fa-trash"></i></td>
                    </tr>
                </table>

Comentario más útil

Ok, lo arreglé, es porque dataOptions puede ser undefined . Entonces el código debería ser

 if (settings.dataOptions && !settings.dataOptions.applyPaging) {
   return ngTableDefaultGetData(result, params);
 }

Todos 10 comentarios

¿Está seguro de que está relacionado con el hecho de que su fuente es un archivo JSON?
Creo que tengo el mismo problema, aunque mi fuente de datos es un servicio.

Ese servicio devuelve una promesa y cuando se resuelve configuro params.total() , como se describe en la documentación antes de devolver el resultado, pero la paginación aún no funciona.

Tengo el mismo problema, al paginar datos de grupo. Entonces, agrego estas líneas al final en la función getGroups .

if (!settings.dataOptions.applyPaging) {
    return ngTableDefaultGetData(result, params);
}
return ngTableDefaultGetData.applyPaging(result, params);

La paginación funciona en uso predeterminado o personalizado.

Sí, esta es casi la misma solución que mencioné en el #872. No estoy seguro de si la verificación de settings.dataOptions.applyPaging es importante, ya que se configura manualmente como falsa algunas líneas arriba.

@fsm3xpert , @tandibar , apliqué la solución propuesta por @fsm3xpert y funciona, pero obtengo lo siguiente en mi consola:

Possibly unhandled rejection: {}

¿Algunas ideas?

Ok, lo arreglé, es porque dataOptions puede ser undefined . Entonces el código debería ser

 if (settings.dataOptions && !settings.dataOptions.applyPaging) {
   return ngTableDefaultGetData(result, params);
 }

Por cierto, una versión futura de ng-table significará que los valores de configuración anidados (EG
dataOptions) nunca será indefinido

El miércoles 21 de diciembre de 2016 a las 19:19, María Inés Parnisari <
[email protected]> escribió:

Ok, lo arreglé, es porque las opciones de datos pueden no estar definidas. Entonces el código
debiera ser

if (configuraciones.opciones de datos && !configuraciones.opciones de datos.applyPaging) {
devuelve ngTableDefaultGetData (resultado, parámetros);
}


Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/esvit/ng-table/issues/893#issuecomment-268614815 , o silenciar
la amenaza
https://github.com/notifications/unsubscribe-auth/AA2HPk4I47xMpIlEbXSDSCMUu0mlGn7Vks5rKXu4gaJpZM4Jagxg
.

en caso de que alguien tenga el mismo problema que yo, que es que cambiar el código de la biblioteca no es una opción por el motivo que sea, encontré una solución alternativa:

El problema parece ser que la agrupación simplemente no está implementada para tratar con datos paginados. Lo que terminé haciendo es recuperar mis datos para la página deseada y almacenar en caché el número total de elementos en una variable.
actualTotal = params.total()
Luego implementé un interceptor de respuesta como se describe en http://ng-table.com/#/global -customization/demo-response-interceptors. Allí puedo volver a establecer el valor total en el valor almacenado en caché. Esto corrige la visualización de la paginación.

Queda un problema pendiente, que es que si el usuario intenta ir a otra página que no sea la 1, no verá nada ya que la agrupación divide la matriz de datos con este código:
var pagedData = data.slice((params.page() - 1) * params.count(), params.page() * params.count());
Una solución simple para esto también es configurar la página en 1 en la función getData una vez que haya recuperado los datos, almacenar en caché la página real y restablecerla en el interceptor.

Después de aplicar la solución sugerida, el filtrado dejó de funcionar para mí. Para solucionarlo, en las líneas anteriores, tuve que configurar dataOptions así:

settings.dataOptions = { applyPaging: false, applyFilter: false };

¿Esta solución está disponible en la última versión? si no, en qué línea debe agregarse.

No está disponible en la última versión.
Lo tengo funcionando modificando esta sección de código:
if (sortDirection) {
var orderByFn = ngTableDefaultGetData.getOrderByFn();
var orderBy = util_1.convertSortToOrderBy({
value: sortDirection
});
result = orderByFn(result, orderBy);
}
return ngTableDefaultGetData.applyPaging(result, params);

con este:
if (sortDirection) {
var orderByFn = ngTableDefaultGetData.getOrderByFn();
var orderBy = util_1.convertSortToOrderBy({
value: sortDirection
});
result = orderByFn(result, orderBy);
}
if (sortDirection) { var orderByFn = ngTableDefaultGetData.getOrderByFn(); var orderBy = util_1.convertSortToOrderBy({ value: sortDirection }); resultado = orderByFn(resultado, orderBy); } if (!settings.dataOptions.applyPaging) { return ngTableDefaultGetData(resultado, params); } devuelve ngTableDefaultGetData.applyPaging(resultado, parámetros);`

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ulise picture ulise  ·  5Comentarios

Nagendra1402 picture Nagendra1402  ·  3Comentarios

yujiayinshi picture yujiayinshi  ·  8Comentarios

muhlegg picture muhlegg  ·  29Comentarios

zeeshanhanif picture zeeshanhanif  ·  5Comentarios