2013-04-29 12 views
9

Negli esempi angularFire mostra come ottenere una raccolta di oggetti da Firebase.AngularFire single object

app.controller('ctrl', ['$scope', '$timeout', 'angularFireCollection', 
    function($scope, $timeout, angularFireCollection) {  
    var url = 'https://ex.firebaseio.com/stuff'; 
    $scope.col = angularFireCollection(url); 
    } 
]); 

Che dire di un solo oggetto?

Ho provato qualcosa di simile:

fb.child('stuff/'+id).on('value', function(snapshot) { 
    $scope.obj = snapshot.val(); 
    console.log('hey got the value') 
    console.log(snapshot.val()) 
    }); 

non sembra funzionare. La console emette correttamente il valore dell'oggetto ma il controllore non si aggiorna.

+1

Per quanto riguarda il motivo per cui il tentativo non ha funzionato: quando si modifica $ scope al di fuori di una funzione angolare (come in quella callback di Firebase), è necessario attivare manualmente un $ digest con $ scope. $ Apply(). C'è una spiegazione abbastanza buona qui: http://jimhoskins.com/2012/12/17/angularjs-and-apply.html – bennlich

risposta

9

provare a utilizzare il servizio di angularFire regolare, e specificando il tipo di oggetto unico:

app.controller('ctrl', ['$scope', '$timeout', 'angularFire', 
    function($scope, $timeout, angularFire) {  
    var url = 'https://ex.firebaseio.com/stuff'; 
    angularFire(url, $scope, "obj", ""); 
    } 
]); 

Nota 4 ° argomento ("" significa stringa, è possibile utilizzare anche booleani, numeri, oggetti e gli array).

+0

Ricevo 'Errore: tipo mancata corrispondenza' – Harry

+0

Il singolo oggetto all'URL è una stringa? Devi cambiare il 4 ° argomento per essere un oggetto dello stesso tipo di quello che è in "https://ex.firebaseio.com/stuff" o cosa hai intenzione di memorizzare lì. Assicurati inoltre di utilizzare l'ultima versione della libreria: http://firebase.github.io/angularFire/angularFire.js – Anant

+0

È un oggetto, quindi ha funzionato dopo aver sostituito le virgolette con parentesi. Questa API non ha senso per me, inizialmente ho provato a mettere "oggetto" come ultimo argomento. C'è qualche documentazione per questo? Cosa ne pensi della standardizzazione/autorizzazione della stessa API per singoli oggetti e collezioni, quindi non dobbiamo caricare più provider (si spera che si usi la terminologia corretta)? – Harry