/ / Come ottimizzare il recupero dei dati e la condivisione dei dati tra i controller con l'associazione automatica AngularFire? - firebase, angularfire

Come ottimizzare il recupero dei dati e la condivisione dei dati tra i controller con il binding automatico di AngularFire? - firebase, angularfire

Dì che ho

  1. una vista elenco + controller che visualizza un elenco di nomi di articoli e
  2. una vista di dettaglio + controller che mostra i dettagli di un articolo.

Come utilizzerei Angularfire (preferibilmente con il binding automatico a tre vie) in un modo che non recuperi gli stessi dati due volte?

Perché il controllore # 1 avrebbe già recuperato gli articoli E i loro dettagli quando il (itemsListRef).$bind($scope, "items"); dichiarazione eseguita. Nel controller # 2, (itemDetailRef,).$bind($scope, "itemDetail") recupererebbe quindi i dati dei dettagli degli articoli che ancora sono stati recuperati nel controller # 1.

Un'opzione che ti viene in mente: Un servizio angolare può essere utilizzato per recuperare i dati degli articoli una volta e poi condividere i dati tra i controller, ma non sono sicuro di come il binding automatico a tre vie angularfire possa giocare in questo, o se funzionerebbe. I tuoi pensieri / consigli su questo? Altre opzioni? Quale sarebbe il modo consigliato per gestire questo?

risposte:

1 per risposta № 1

Il client Firebase è abbastanza intelligente da usare acache locale se esiste. Le istanze di Firebase sono singleton per ciascun URL base di Firebase, quindi il collegamento di più listener in percorsi diversi nello stesso Firebase non causare attività di rete non necessarie.

Raccomando di creare un $firebase riferimento in un servizio e quindi utilizzando un bind di dati a 3 vie per i dettagli dell'elemento in un controller. Per esempio:

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");
}]);