2016-07-11 4 views
2

Ich benutze FireBase und versuche, einige Abfragen auszuführen, die Ergebnisse werden zwar protokolliert, sind aber im HTML $scope nicht sichtbar.

var shopRef = firebaseDataService.intro; 

$scope.shops = []; 

var taskRef = shopRef.orderByChild("cat").equalTo("Accomodation"); 


taskRef.on("value", function(snapshot) { 
    var snapData = snapshot.val(); 
    console.log(snapData); 
    $scope.shops.push(snapData); 

}); 

Als ich $scope.$apply() verwenden, ich verwalten die Daten zu den Geschäften aktualisiert zu bekommen, aber es ist vorbei noch nichts zu meiner Richtlinie.

<search-card shops="shops"> </search-card> 
    <p> Shops are {{shops}}</p> 

Ich habe es funktioniert irgendwie mit $ firebaseArray

$scope.shops = $firebaseArray(taskRef); 

aber ich `d immer noch zu wissen, was ich falsch mache und warum es nicht mit dem Schnappschuss zu arbeiten.

+0

Wenn i $ Bereich zu verwenden. $ Apply() , Ich schaffe es, die Daten in Shops zu aktualisieren, aber es aktualisiert den Bereich in meiner Direktive immer noch nicht. Selbst mit $ scope. $ Watch in der Direktive. – pecata

+0

Welche Direktive? – adolfosrs

Antwort

5

Vom angularfire docs:

// read data from the database into a local scope variable 
ref.on("value", function(snapshot) { 

    // Since this event will occur outside Angular's $apply scope, we need to notify Angular 
    // each time there is an update. This can be done using $scope.$apply or $timeout. We 
    // prefer to use $timeout as it a) does not throw errors and b) ensures all levels of the 
    // scope hierarchy are refreshed (necessary for some directives to see the changes) 
    $timeout(function() { 
     $scope.data = snapshot.val(); 
    }); 
}); 

Es scheint, dass $scope.apply() verwendet, wird nicht die gesamte Hierarchie aktualisieren (und damit die Richtlinie). Versuchen Sie $timeout mit wie vorgeschrieben statt


aber sagen, dass ich glaube, Sie mit der $firebaseArray() Option gehen sollte, dass scheint mir als die „Winkel“ Lösung

+0

mit $ timeout funktioniert, aber es gibt ein Objekt zurück, denke auch, dass $ firebaseArray eine bessere Lösung ist. – pecata

Verwandte Themen