Powiedz, że mam
- widok listy + kontroler, który wyświetla listę nazw przedmiotów i
- 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 № 1Klient 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");
}]);