/ / Jak zoptymalizować pobieranie danych i współdzielenie danych między kontrolerami za pomocą automatycznego wiązania AngularFire? - firebase, angularfire

Jak zoptymalizować pobieranie danych i współdzielenie danych między kontrolerami dzięki automatycznemu wiązaniu AngularFire? - firebase, angularfire

Powiedz, że mam

  1. widok listy + kontroler, który wyświetla listę nazw przedmiotów i
  2. widok szczegółowy + kontroler, który pokazuje szczegóły dotyczące przedmiotu.

Jak używać ognia kątowego (najlepiej z automatycznym wiązaniem trójstronnym) w sposób, który nie powoduje dwukrotnego pobrania tych samych danych?

Ponieważ kontroler nr 1 już pobrałby elementy I ich dane, gdy (itemsListRef).$bind($scope, "items"); Instrukcja wykonuje. W kontrolerze nr 2, (itemDetailRef,).$bind($scope, "itemDetail") następnie pobierał dane o szczegółach przedmiotu, które ponownie zostały już pobrane w kontrolerze nr 1.

Jedna opcja, która przychodzi do głowy: Usługa kątowa może zostać użyta do jednorazowego pobrania danych pozycji, a następnie udostępnienia danych między kontrolerami, ale nie jestem pewien, w jaki sposób można by w tym celu zastosować trzykierunkowe automatyczne powiązanie, czy nawet zadziała. Twoje myśli / porady na ten temat? Jakieś inne opcje? Jaki byłby zalecany sposób radzenia sobie z tym?

Odpowiedzi:

1 dla odpowiedzi № 1

Klient Firebase jest na tyle sprytny, aby użyć alokalna pamięć podręczna, jeśli istnieje. Instancje Firebase są singletonami dla każdego podstawowego adresu URL Firebase, więc dołączenie wielu detektorów przy różnych ścieżkach w tej samej Bazie nie powodują niepotrzebną aktywność w sieci.

Polecam tworzenie $firebase odniesienia w usłudze, a następnie za pomocą 3-drożnego powiązania danych dla szczegółów pozycji w kontrolerze. Na przykład:

var myapp = angular.module("myapp", ["firebase"]);

myapp.factory("ItemService", ["$firebase", function($firebase) {
return $firebase(itemsListRef);
}]);

myapp.controller("DetailCtrl", ["$scope", "ItemService", function($scope, items) {
items.$child(itemId).$bind($scope, "itemDetail");
}]);