AngularUI Kalender-Ereignisquelle, die eine Funktion für jeden Ansichtswechsel aufruft

8

Um das Problem zu demonstrieren, erkläre ich, was ich zu erreichen versuche. Ich erstelle ein Buchungssystem mit AngularUI-Kalender, und das Problem ist, dass die Leistung des Kalenders sehr schnell und merklich nachlässt, wenn die Anzahl der Ereignisse zunimmt (mehr als 100 Ereignisse und der Kalender dauert Minuten, um Daten zu binden). Aus diesem Grund versuche ich, Daten vom Backend zu holen, wenn sich die Ansicht ändert, indem ich eine AJAX-Anfrage jedesmal wenn der Benutzer die Ansicht wechselt (Woche, Monat, Tag, vorher, nächstes ... usw.) anschließe habe Probleme.

Wie auf der Website AngularUI-Kalender vorgeschlagen wurde, kann ich diese Funktion verwenden: $scope.eventsF = function (start, end, timezone, callback) {...} und add es an die $scope.eventSources und es wird auf jedem View-Schalter aufgerufen werden. Ich habe das $scope.eventsF zu meinem $scope.eventSources hinzugefügt, aber es wurde nie aktualisiert.

Hier ist das Beispiel (alle Daten abrufen, und es funktioniert):

%Vor%

Nun habe ich Event.getEvents() geändert, um zwei Parameter als Startdatum und Enddatum der Ansicht zu verwenden, sie an das Backend zu senden und Daten als json wieder abzurufen (funktionierte gut, ich habe das getröstet).

Hier ist der Code (ich habe es auf zwei Arten versucht): Ereignisse werden gerendert, aber $scope.eventSources wird in beiden nicht aktualisiert.

Erstens:

%Vor%

Zweitens:

%Vor%

Ich hoffe, das ist klar genug.

    
Anas 28.10.2015, 13:34
quelle

3 Antworten

1

Ich habe eine Lösung für das Problem gefunden. Ich habe nicht ganz verstanden, warum ich es so machen muss, aber ich habe es geschafft, es zum Laufen zu bringen. Ich hatte die Ereignisse nacheinander aus dem $scope.mainEvents -Array entfernt (ich denke, im AngularUI-Kalender verwenden sie $watch für jedes einzelne Ereignis), fügen dann die neuen Ereignisse vom Versprechen bis zum $scope.mainEvents ebenfalls eins hinzu ein. NICHT Verwenden Sie die Funktion callback() , da $scope aktualisiert wird ( $watch kümmert sich um das Rendering), so dass callback() das Ereignis erneut rendern wird, damit Sie enden mit jedem Ereignis, das zweimal gerendert wird. Hier ist der endgültige Code:

%Vor%     
Anas 07.11.2015, 16:40
quelle
1

Der einfachste Weg, an den ich denken kann, besteht darin, Ereignisquellen am Ende von $scope.eventSources auf $scope.eventsF umzuleiten. Der folgende Code basiert auf Ihrer zweiten Option. Prost.

%Vor%

Bearbeiten

Ich habe den obigen Code aktualisiert, um zu zeigen, bei welchem ​​Teil ich $scope.eventSources getestet habe. Können Sie bitte zeigen, an welchem ​​Teil des Beispielcodes Sie möchten, dass $scope.eventSources aktualisiert wird?

    
marson parulian 03.11.2015 21:15
quelle
1

Ich vermute, dass es durch den Variablenumfang von Javascript verursacht wird. Sie haben auf $scope.eventSources in einem anderen Bereich als $scope.eventSources in Ihrem Controller verwiesen. Vielleicht wird $scope.eventSources irgendwo im AngularUI-Kalender kopiert.

Sie könnten auf $scope.eventSources in Ihrem Controller zugreifen, indem Sie einfach eine Variable erstellen, die einen Verweis auf die Variable enthält.

%Vor%     
marson parulian 05.11.2015 18:02
quelle