Twierdzę, aby dowiedzieć się AngularJS, pochodzących z wielu różnych ram MV *. Podoba mi się framework, jednak mam problem z przekazywaniem danych między kontrolerami.Przekazywanie danych między kontrolerami
Załóżmy, że mam ekran z niektórymi danymi wejściowymi (input.html) i kontrolerem, powiedzmy InputCtrl.
W tym widoku znajduje się przycisk, który przenosi użytkownika do innego ekranu, powiedzmy zatwierdzenia (approve.html) za pomocą kontrolera ApproveCtrl.
Ten parametr ApproveCtrl potrzebuje danych z InputCtrl. Wydaje się to bardzo częstym scenariuszem w większych aplikacjach.
W moich poprzednich ram MV *, byłoby to traktowane jak (pseudo-kod):
var self = this;
onClick = function() {
var approveCtrl = DI.resolve(ApproveCtrl);
approveCtrl.property1 = self.property1;
approveCtrl.property1 = self.property2;
self.router.show(approveCtrl);
}
- To będzie działać jak Controller pierwszy. Najpierw utworzysz kontroler, mając szansę, aby umieścić go w prawidłowym stanie; następnie tworzony jest widok.
Teraz w angularjs, jestem obsługi to tak:
var self = this;
onClick = function(){
self.$locationService.path('approve');
}
- Działa to podobnie jak widok pierwszego. Mówisz, do którego widoku/trasy nawigujesz, kontroler jest tworzony przez framework.
Trudno jest kontrolować stan utworzonego kontrolera i przekazywać do niego dane. widziałem i próbowałem następujące podejścia, ale wszystkie mają swoje własne problemy moim zdaniem:
- wstrzyknąć Shared Service w InputCtrl & ApproveCtrl i umieścić wszystkie dane, które mają być udostępniane na tej usługi
- to wygląda jak brudna praca; stan w udostępnionej usługi staje się stan globalnej, podczas gdy po prostu trzeba go przekazać dane do ApproveCtrl
- Żywotność tej wspólnej służby jest sposób dłużej, niż to, czego potrzebuję go - wystarczy przekazać dane do ApproveCtrl
- przekazać dane w $ routeParams
- to robi się dość niechlujny kiedy posiadające przepustkę wiele parametrów
- użyć $ zakres zdarzeń
- Con ceptually, nie jest to coś, w czym bym użył zdarzeń - po prostu muszę przekazać dane do ApproveCtrl, nic zdarzenia - jest to
- To jest dość uciążliwe; Muszę wysłać zdarzenie do rodzica pierwsze, które następnie transmitowane go to dzieci
Am I brakuje czegoś tutaj? Czy tworzę zbyt wiele małych kontrolerów? Czy staram się trzymać za bardzo nawyków z innych struktur?
Chciałbym pójść z 3 według twoich potrzeb. Usługa służy do przesyłania danych między kontrolerami, którzy muszą udostępniać dane, a nie głównie do stanów. Również rozwiązanie 2 jest znacznie prostsze, ale parametry trasy staną się kłopotliwym problemem w miarę ich wzrostu. –
Trzecia opcja to właściwa droga. –
Czy zamierzasz zaakceptować odpowiedź XLII, linki były kopalnie złota, jak był schemat. –