Wie verwenden von AngularJS zu faul laden von Inhalten in einem "Reduzierbare Palette"
Ich Baue eine Anwendung, die verwendet die Bootstrap-Zusammenbruch Komponente zum Rendern einer Sequenz von panels, die zunächst im eingeklappten Zustand.
Da auf der Seite viele solcher Platten, und jede von Ihnen können enthalten eine große Menge des Inhalts, es scheint angemessen zu sein, füllen Sie diese Platten auf Nachfrage, von der Ausführung einer AJAX-Aufruf, wenn der Benutzer erweitert ein beliebiges Bedienfeld.
Den dynamischen Inhalt der Seite (einschließlich der markup-Code für die panels) ist gerendert mit AngularJS, und ich vermute, es ist möglich zu konfigurieren Winkel zum binden an ein Ereignis auf dem panel-Elemente, dass die Ergebnisse in die Inhalte lazy geladen wird, wenn Sie sich erweitern.
Leider, nach einem Blick auf die AngularJS-Dokumente und die verfügbaren tutorials, die ich nicht sehen kann, wie am besten in Angriff zu nehmen. Kann jemand werfen Licht auf?
Vielen Dank im Voraus,
Tim
- Verwenden Sie einfach
<div ng-include="panelTemplate"></div>
innerhalb Ihrer Gremien und definieren/festlegenpanelTemplate
var in dem moment Sie öffnen Sie die Systemsteuerung. Dies führt das XHR-Anfrage und Holen sich die panel-Ansicht nur in dem moment, das panel ist das erste mal geöffnet. - Dank Stewie. Das sieht wie ein vielversprechender Ansatz, aber ich bin nicht klar, wie trigger definieren/festlegen von panelTemplate, wenn das panel geöffnet ist. Wenn Sie buchen möchten, eine Antwort mit einem code-Beispiel, ich werde es versuchen und (vermutlich) akzeptieren. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Tim Coulter, habe ich etwas geschaffen, das nach der Idee von @Stewie.
Kann es auf jeden Fall verbessert werden, aber ich denke, es ist ein guter Ausgangspunkt.
Habe ich eine kleine Richtlinie zum binden des click-Ereignisses des Akkordeon-panel. Wenn das click-Ereignis ausgelöst, ich habe das panel-template über die
panel-template=
- Attribut und aktualisiert dasmain-template
die verwendet wird, in das panel.Verweist er auf 2 html-Dateien (panel1.html und panel2.html), die den Inhalt enthält, der jedes panel.
Ich würde empfehlen, einen Dienst zu erstellen, zu Holen, diese Dateien über AJAX - genau so, wie Sie wollte.
Auf den code unten, ich habe einen Dienst namens
dataService
für diesen Zweck, und Sie sollten binden Sie es an dieclick
Ereignis - so-Dateien werden auf Abruf geladen, wenn der Benutzer darauf klickt.Beachten Sie die mainTemplate ist ein gemeinsames Gremium für alle Akkordeons, so dass, wenn es änderungen, die alle Akkordeons werden die gleichen Inhalte, ABER ich gehe davon aus, das Sie anzeigen möchten nur ein panel zur Zeit, richtig ?!
Jedenfalls, wie ich sagte, bevor die Logik verbessert werden kann, diese zu beheben, wenig 'Hinweise', aber ich glaube, die core-Funktionen gibt es, um mit zu beginnen. 🙂
Dies ist so alt, aber die Frage könnte noch kommen, bis jetzt und dann. Jetzt finde ich das die beste Lösung ohne umweltschädliche Ihren Controller:
(
myDirective
laden Ihre Inhalte über AJAX direkt nach seiner Erstellung.)jedes element erstellt durch
ng-repeat
bekommt seine eigene $scope, also Klick ab-Akkordeon-Gruppe wird im Ergebnis nur der jeweiligen Richtlinie geladen wird.Bearbeiten:
je nach Latenz und die Größe der Daten, die zu faul sind geladen, sollten Sie überlegen, mit
ng-mouseover
stattng-click
. So laden beginnt einige 100ms, bevor der Benutzer öffnet das Akkordeon, das kann reduzieren die 'Trägheit' der Benutzeroberfläche. Natürlich gibt es die Kehrseite der gelegentlich laden Sie den Inhalt von Gruppen, die sind eigentlich nie geklickt.