0

私はAngularJSを初めて使用しており、現時点ではリアルタイムアプリにGoogle Firebaseを使用しています。私は私のファクトリクラス.getFriends()方法に私の$scope.friends変数を設定し、私のコントローラでAngularJSの工場アップデート時のスコープ変数の更新

angular.module('App') 

.factory('friendsFactory', function(){ 

    var friends = []; 
    var friendshipRef = firebase.database().ref('friendships'); 

    friendshipRef.on('value', function(snapshot){ 

    //etc.. updates friends array 

    }); 

    return{ 
     getFriends: function(){ 
     return friends; 
     }, 
     //etc 
    } 

:私は、次のコードを使用して、リアルタイムで自分のFirebaseデータベースをチェック工場「フレンズ」を作成しました。これはうまく動作し、私のページはすべての友人を正しく表示します。

$scope.friends = friendsFactory.getFriends(); 

ただし、工場が更新されるとすぐに、これらの変更はスコープ変数とビューに反映されません。私は$apply$watchなどを試してみましたが、私はどのように私のスコープとビューが工場がすぐに更新されることを確認することができないのか分かりません。今は、別のページに移動して戻るたびに、変更が表示されます。彼らはリアルタイムで更新されません。誰も私がこれを達成するのを助けることができますか?どうもありがとう!

+0

'friends'配列の更新方法を表示できますか? – taguenizy

+0

'$ watch'は完全に動作するはずです。あなたのコントローラで時計をどのように使用しているかを表示できますか? – ThatBird

答えて

0

リストは最初に1回だけ取得されるため、

$scope.$applyonセクションにする必要がありますが、工場で行うのは適切ではありません。

angularfire

高速ソリューションを使用しようとすると、動作します:

angular.module('App') 
.factory('friendsFactory', function(){ 

    var friends = []; 
    var friendshipRef = firebase.database().ref('friendships'); 

    friendshipRef.on('value', function(snapshot){ 
     $timeout(function() { 
      //etc.. updates friends array 
     }); 
    }); 

    return{ 
     friends: friends, 
     //etc 
    } 

とコントローラで:

$scope.friends = friendsFactory.friends; 
+0

私はあなたのソリューションを試しましたが、現時点では何も返されていません。$ scope.friendsは空です。 – Robin

+0

'on'セクションで '$ scope。$ apply'を実行する必要がありますが、工場。これを使用してみてください:https://github.com/firebase/angularfire –

0

次の3つの方法は、間の結合んangularfireを使用してこれを実行する必要がありますfirebaseデータベース、あなたのモデルとビュー。

1.プロジェクトにangularfireを含めます。

2.これに従って工場を更新してください。何もする必要はありません。 firebaseデータベース内のfriendshipsノード上のデータが更新されると、それはangularfireに通知され、angularfireはローカル変数を更新して$scope.$applyを呼び出し、ビューも更新されます。

// factory 
angular.module('App', ['firebase']) 

.factory('friendsFactory', function($firebaseArray){ 
    var friendshipRef = firebase.database().ref('friendships'); 

    return { 
     friends: $firebaseArray(friendshipRef) 
    } 
}); 

// controller 
$scope.friends = friendsFactory.friends; 
関連する問題