Ich verwende Ionic Framework und Firebase ist mein BaaS.
Controller:
.controller('ProfileCtrl', function($scope, AuthService, DatabaseService) {
console.info('** ProfileCtrl **');
var user = firebase.auth().currentUser;
$scope.public = {};
DatabaseService.getUserPublicInfo(user.uid)
.then(function(infoSnap) {
infoSnap.forEach(function(item) {
$scope.public[item.key] = item.val();
});
});
})
Service:
.service('DatabaseService', function($q) {
this.getUserPublicInfo = function(uid) {
return firebase.database().ref('/users/'+uid+'/public/').once('value');
}
}
In meiner HTML-Ansicht ich folgendes haben:
<div><h3>{{public.firstname}} {{public.lastname}}</h3></div>
kein Fehler, und wenn das Debuggen, $ scope.public.firstname als der richtige Wert darin aber nichts wird angezeigt. Ich habe eine Schaltfläche in meiner HTML-Ansicht; Wenn ich darauf klicke, ändert sich die Seite, aber kurz bevor die Seite wechselt, sehe ich den Vornamen. Wenn ich zu meiner Ansicht zurückkehre, wird der Vorname gut angezeigt.
Ich versuchte getUserPublicInfo in $ Umfang zu wickeln. $ Apply() in meinem Controller aber ich habe den "$ Digest bereits im Gange" Fehler ...
Bitte helfen Sie, es macht mich verrückt!
Vielen Dank im Voraus
Danke Ved für Ihre schnelle Antwort, aber ich würde zu vermeiden, wie die $ verdauen Fehler zu beheben, aber die Vermeidung $ verwenden apply(). Weißt du, warum mein erstes Stück Code nicht funktioniert? –
Wenn $ scope außerhalb der Angular-Welt aktualisiert wird, wird $ digest cycle nicht ausgelöst. Derselbe Fall hier. Wenn Sie die Verwendung von $ appy() vermeiden möchten, müssen Sie als Wert für $ scope.public in Angular world einen anderen Wert angeben. – Ved
Semikolon richtig hinzufügen '$ timeout (function() { $ scope. $ Apply(); }, 1);' –