Angular 7 - Nur eine begrenzte Anzahl an JS-Objekten von der API "holen"

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Werbung

Jetzt auf elektrisches Fahren umstellen, Umwelt schonen und 1.500km kostenlosen Strom von Tesla bekommen. https://ts.la/carsten15473.

Tabula_Rasa

Mitglied
12 Mai 2017
187
2
18
Hallo,

wenn man eine Test-Api zur Verfügung hat, die aber enorm viele Objekte enthalten, ist es da möglich nur bestimmte Objekte zu "holen", also z.B. die ersten 20, damit nicht alle Daten geholt werden, doch für Testzwecke nur 20 genutzt werden. Ich möchte dadurch die Ladezeit nach jeder Änderung verringern

Code:
ngOnInit(){
this.service.apiCall().subscribe( data => {
this.variable = data;
})
}
Der obige exemplarische Code weist der Variable "this.variable" die Werte der API zu. Kann man da eine Beschränkung einfügen? Könnte jemand den Code da oben modifizieren mit einer beispielhaften, möglichen Beschränkung, sodass beispielsweise die ersten 20 Werte zugewiesen werden?
 

Tronjer

Moderator
Team
Moderator
8 Oktober 2010
5.124
444
83
Berlin
wenn man eine Test-Api zur Verfügung hat, die aber enorm viele Objekte enthalten, ist es da möglich nur bestimmte Objekte zu "holen",
Eine solche Option müsste die API des Backends anbieten.

Ich möchte dadurch die Ladezeit nach jeder Änderung verringern
Klingt für mich nach einem Designproblem. Was genau hast du vor?
 
Reactions: Tabula_Rasa

Tabula_Rasa

Mitglied
12 Mai 2017
187
2
18
Klingt für mich nach einem Designproblem. Was genau hast du vor?
Ich denke, dass es sicherlich kein Designproblem ist. Es handelt sich um mehrere 10 Tausend Objekte.


Eine solche Option müsste die API des Backends anbieten.
Für das Backend ist jemand anderes zuständig, also ist es nicht möglich und der, der für das Backend zuständig ist, müsste einfach weniger Daten zur Verfügung stellen? Gibt es da keine Möglichkeit die Anzahl selbst zu bestimmen?
 

scbawik

Senior HTML'ler
14 Juli 2011
2.542
448
83
Für das Backend ist jemand anderes zuständig, also ist es nicht möglich und der, der für das Backend zuständig ist, müsste einfach weniger Daten zur Verfügung stellen? Gibt es da keine Möglichkeit die Anzahl selbst zu bestimmen?
Natürlich kannst du das ganze in Javascript "slicen", aber die gesamten Daten müsstest du deswegen trotzdem erst einmal in den Client laden.
 
Reactions: Tabula_Rasa

Tronjer

Moderator
Team
Moderator
8 Oktober 2010
5.124
444
83
Berlin
Ich denke, dass es sicherlich kein Designproblem ist. Es handelt sich um mehrere 10 Tausend Objekte.
Wenn ein einzelner Request zehntausende von Objekten liefert und man kein Limit setzen kann, würde ich durchaus von einem Designproblem sprechen. Backendseitig.

Aber wenn sich schon nicht beeinflussen lässt, wieviel Daten kommen, ist es vielleicht möglich, zu kontrollieren, wie häufig, zu welchem Zeitpunkt und zu welchem Anlass der Request gesendet werden muss. Du hattest "bei jeder Änderung" geschrieben. Welche Änderungen meintest du?
 

Tabula_Rasa

Mitglied
12 Mai 2017
187
2
18
Beim Speichern von neuem Code wird der Code ja direkt kompiliert und um das Ergebnis zu betrachten muss man ca. 15-20 Sekunden warten bis alle Daten geladen sind. Lässt sich leider nicht vermeiden, weil der Code sich auf diese Daten bezieht. Da muss dann was am Backend geändert werden.

Hätte da noch eine Frage ganz nebenbei, um nicht ein neues Thema zu öffnen und diesen ganzen Bereich vollzuspammen.

Ich nutze derweil Syncfusion für das Grid. Syncfusion bietet eine Funktion getSelectedRowRecords() welche ein Objekt[] als Rückgabewert hat.

Ein Beispiel von der offizellen Dokumentation:

Code:
rowSelected(args: RowSelectEventArgs) {
    let selectedrowindex: number[] = this.grid.getSelectedRowIndexes();  // Get the selected row indexes.
    alert(selectedrowindex); // To alert the selected row indexes.
    let selectedrecords: Object[] = this.grid.getSelectedRecords();  // Get the selected records.
}
In der Console sieht man auch das Objekt, folgendermaßen ausgegeben wir {...}. Die Punkte "..." stehen für die Variablen und Werte der Reihe. Mein Code sieht zwar etwas anders aus, aber wollte anhand dieses Beispiels lernen wie man auf die Elemente des Objekt zugreift (Hab den Code leider nicht hier). Bei einem Klick bekommt man den Index der Reihe und das dazugehörige Objekt ( in meinem Fall nur 1). Wie käme ich an die Elemente bzw. Element und sein Wert ran? Hab da einiges ausprobiert, aber nichts gescheites hinbekommen. Ich hab allgemein kein Verständnis dafür wie man auf Elemente eines Objekts zugreift.

Die meisten Elemente muss ich nicht auf den Bildschirm bringen, deshalb frage ich mich wie ich direkt mit dem Elementnamen den Wert des Elements herausbekomme. Wenn ich das verstehen würde, wäre es genial.
 

Tronjer

Moderator
Team
Moderator
8 Oktober 2010
5.124
444
83
Berlin
Beim Speichern von neuem Code wird der Code ja direkt kompiliert und um das Ergebnis zu betrachten muss man ca. 15-20 Sekunden warten bis alle Daten geladen sind.
Wenn es dir nur darum geht, das rerendern des Browsers zu vermeiden, rufe ng serve mit --live-reload false auf.

Bei einem Klick bekommt man den Index der Reihe und das dazugehörige Objekt ( in meinem Fall nur 1). Wie käme ich an die Elemente bzw. Element und sein Wert ran? Hab da einiges ausprobiert, aber nichts gescheites hinbekommen. Ich hab allgemein kein Verständnis dafür wie man auf Elemente eines Objekts zugreift.
Ein Objekt besteht aus Keys und Values. JSON.parse(myObj) zeigt beides in der Konsole Falls du die Keys kennst, kannst du mit myObj.myKey direkt auf den Value zugreifen. Anderenfalls auch über die Keys iterieren, Dafür gibt es mehrere Ansätze, bsw. Object.entries().
 
Reactions: Tabula_Rasa

Tabula_Rasa

Mitglied
12 Mai 2017
187
2
18
Wenn es dir nur darum geht, das rerendern des Browsers zu vermeiden, rufe ng serve mit --live-reload false auf.
Wird der neue Code dann kompiliert, um das Ergebnis zu sehen auch in Bezug auf die empfangenen Daten?

Das mit den Objekten und Funktionen um auf die "Keys" und "Values" zuzugreifen versuche ich mal genauer zu verstehen. Wenn das: {zahl:2, name="irgendeinName"} als JSON zählt und im obigen Code der Variable selectedRecords zugewiesen wird, müsste doch selectedrecords.name ausreichen, um an den Namen (bzw. Value) "irgendeinName" zu gelangen aber es funktioniert einfach nicht.

Wenigstens habe ich jetzt einige Ansätze. Dafür danke ich dir!
 
Werbung: