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.
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:
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.
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?
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.
Tags und Links angularjs angular-ui fullcalendar