Próbuję znaleźć sposób na załadowanie dużych ilości danych (do 1000 wierszy) na stronę, bez stronicowania. Pierwszą przeszkodą w tym było kwerendy DB równolegle ukąszenie średnich kawałków, które zrobiłem z pomocą roztworu w How to make sequentially Rest webservices calls with AngularJS?Ładowanie dużych zestawów danych za pomocą AngularJS
biegnę na dwa problemy z tym, co już wdrożone jednakże:
Każdy zwracany obiekt jest przekazywany do tablicy, która następnie jest zwracana jako tablica, z której korzysta Angular do wiązania. tj [[{klucz: wartość, klucz: wartość, klucz: wartość}, {klucz: wartość, klucz: wartość, klucz: wartość}], [{klucz: wartość, klucz: wartość, klucz: wartość}, {klucz: value, key: value, key: value}]] Jako takie nie mogę użyć ng-repeat = "item in data", ponieważ dane są tablicą tablic. Wykonanie "pozycji w danych [0]" sprawia, że przedmiot jest dostępny. Konkatenacja wydaje się być odpowiedzią, ale nie udało mi się znaleźć sposobu, który by działał.
Wykonuję wiele żądań do bazy danych, a każde żądanie jest zwracane poprawnie, ale strona nie wyświetla się, dopóki wszystkie żądania nie zostaną zakończone - co całkowicie neguje zasadność wykonywania wielu żądań w pierwszej kolejności.
Więc patrząc na mój kod, jak mogę napisać go ponownie, aby rozwiązać te dwa problemy? Czy dane są zwracane jako jedna tablica, a dane są renderowane za każdym razem, gdy zapytanie zostanie zakończone?
app.factory('ScanService', function($http, $q) {
function fetchOne(stepCount) {
return $http({
method: 'GET',
url: '/index.php/scans',
params: {step:stepCount}
})
.then(function onSuccess(response) {
return response.data;
}
return {
fetchAll: function(steps) {
var scans = [];
for (var i = 1; i <= steps; i++) {
scans.push(fetchOne(i));
}
return $q.all(scans);
}
};
});
app.controller.ScanCtrl = function($scope, $q, ScanService) {
$scope.scans = ScanService.fetchAll(10);
};
Kontynuacja
Dodam, że udało się uzyskać ten działa w oparciu o rozwiązania poniżej i angular.forEach(). Nie można zasugerować, aby ktoś pracujący z "dużymi danymi" podążał tą trasą. W około 1000 wierszy przeglądarka była przytłoczona i zaczęła znacznie spowalniać. Próba filtrowania za pomocą filtru angular.filter również uległa znacznemu opóźnieniu do momentu zawężenia wyników. Z drugiej strony kilkaset wierszy działało dobrze i pozwalało na natywne filtrowanie - co było kluczowym celem dla mojej implementacji.
Kto ze zdrowym umysłem chce patrzeć na tysiące rzędów danych? – Bart
@Bart Niestety, musiałem to również zrobić. Niektórzy analitycy biznesowi wygodnie pracują z tysiącami wierszy danych Excela i potrzebują podobnego widoku w Internecie. Podczas gdy ja z całym sercem nie zgadzałem się z nimi, czasami musisz zrobić to, co klient chce :( – Terry
@Bart, który chce przejść przez 100 stron po 10 wierszy? Przypuszczam, że to naprawdę ja szukam alternatywnych rozwiązań paradygmatu stronicowania i nieskończonego przewijania nie rozwiązuje problemu, z którym się borykam. Ogólnie chodzi o to, że ładujesz swoje dane, a następnie filtrujesz je w Angular, więc niekoniecznie będziesz patrzył na 1000 wierszy - ale mógłbyś, gdybyś był szalony. – iamsar