Ich behaupte, AngularJS zu lernen, von vielen verschiedenen MV * Frameworks. Ich mag das Framework, aber ich habe Probleme mit der Weitergabe von Daten zwischen Controllern.Daten zwischen Controllern übergeben
Angenommen, ich habe einen Bildschirm mit einigen Eingaben (input.html) und einem Controller, sagen wir InputCtrl.
Es gibt eine Schaltfläche in dieser Ansicht, die Sie zu einem anderen Bildschirm führt, sagen wir genehmigen (approve.html) mit einem Controller ApproveCtrl.
Diese ApproveCtrl benötigt Daten von der InputCtrl. Dies scheint ein sehr häufiges Szenario in größeren Anwendungen zu sein.
In meinem vorherigen Rahmen MV *, würde dies wie (Pseudo-Code) werden behandelt:
var self = this;
onClick = function() {
var approveCtrl = DI.resolve(ApproveCtrl);
approveCtrl.property1 = self.property1;
approveCtrl.property1 = self.property2;
self.router.show(approveCtrl);
}
- Es wäre zunächst wie Controller- arbeiten. Sie erstellen zuerst den Controller und haben eine Chance, ihn in den richtigen Zustand zu versetzen. Danach wird die Ansicht erstellt.
nun in AngularJS, ich bin der Handhabung dieses wie:
var self = this;
onClick = function(){
self.$locationService.path('approve');
}
- Dies funktioniert wie View-zuerst. Sie sagen, zu welcher Ansicht/Route navigiert werden soll, der Controller wird vom Framework erstellt.
Ich finde es schwierig, den Zustand des erstellten Controllers zu steuern und Daten an ihn zu übergeben. Ich habe folgende Ansätze gesehen und versucht, aber alle haben es eigene Probleme meiner Meinung nach ist:
- Injizieren eines Shared-Service in InputCtrl & ApproveCtrl und setzen alle Daten auf diesen Dienst geteilt werden
- Das sieht wie ein schmutziges Work-around; der Zustand, in dem Shared Service wird globalen Zustand, während ich brauche es nur Daten
- Die Lebensdauer dieser gemeinsamen Dienst an der ApproveCtrl passieren ist viel mehr als das, was ich brauche es für - nur Daten an die ApproveCtrl passieren
- Führen Sie die Daten in $ routeParams
- Dies wird ziemlich chaotisch, wenn
- Con viele Parameter
- Verwenden $ Umfang Ereignisse den Pass mit Zeptually, das ist nicht etwas, wofür ich Ereignisse verwenden würde - ich muss nur Daten an die ApproveCtrl übergeben, nichts ereignis-ish
- Dies ist ziemlich umständlich; Ich habe zuerst ein Ereignis an die Eltern zu schicken, das wäre es dann zu übertragen, um es Kindern
- Dies wird ziemlich chaotisch, wenn
ist Bin ich hier etwas fehlt? Erstelle ich zu viele kleine Controller? Versuche ich hier zu sehr, Gewohnheiten von anderen Frameworks zu halten?
Ich würde mit dem 3. nach Ihren Bedürfnissen gehen. Der Dienst wird verwendet, um Daten zwischen den Controllern weiterzuleiten, die Daten gemeinsam nutzen müssen, und nicht hauptsächlich Status. Auch Lösung 2 ist sehr viel geradliniger, aber die Route Parameter werden zu einem lästigen Problem, wenn sie wachsen. –
3. Option ist der richtige Weg. –
Werden Sie XLII Antwort akzeptieren, die Links waren Goldminen wie das Diagramm war. –