2013-05-24 22 views
6

私はfirebaseを初めて使用しています。私はangularjsとそれを構築したいと私は角度火災を発見した。Firebase AngularFire暗黙同期と明示的同期の違い

記載されているangularFireドキュメント 暗黙的同期と明示的同期。私はgithubの文書を理解しようとしましたが、私はまだ違いと使い方を理解していません。 angularFire()angularFireCollection()

も、引数がangularFire()angularFireCollection()に意味は何ですか?

ADVで感謝

答えて

19

使用angularFireあなたが暗黙の同期をしたい場合は、お使いのモデルに作られた、すなわちすべての変更は、即座に他のすべてのクライアント(またはその逆)に伝播されます。

ローカルデータの変更をサーバーに送信する必要があるときに制御したい場合は、angularFireCollectionを使用します。リモートで変更を加えても、ローカルコレクションは自動的に更新されます。

暗黙の同期:

myapp.controller('MyCtrl', ['$scope', 'angularFire', 
    function MyCtrl($scope, angularFire) { 
    var promise = angularFire(url, $scope, 'items', []); 
    } 
]); 

最初の引数は、データを取得/保存したい時Firebaseの場所です。 2番目の引数はスコープです.3番目の引数は、$ scopeの下にあるプロパティの名前です。約束が満たされるとすぐにデータをバインドします。例:

promise.then(function() { 
    // Data available in $scope.items 
}); 

第4引数は、JSオブジェクトに必要なデータのタイプです。配列の場合は[]、オブジェクトの場合は{}、文字列の場合は""、数字の場合は1、ブール値の場合はtrueを使用します。提供されたFirebaseの場所にデータが存在しない場合は、この引数を使用してデフォルト値を設定することもできます。

変更を加えたい場合は$scope.itemsを変更するだけで、変更は自動的にFirebase経由で他のすべてのクライアントと同期されます。同様に、リモートで行われた変更は自動的に$scope.itemsに更新されます。

明示的な同期:

myapp.controller('MyCtrl', ['$scope', 'angularFireCollection', 
    function MyCtrl($scope, angularFireCollection) { 
    $scope.items = angularFireCollection(url); 
    } 
]); 

このメソッドは、引数を1つしか取ります。アイテムを追加または削除する場合は、add,removeまたはupdateのメソッドを使用します。たとえば:

$scope.items.add({test: "object"}); 

angularFireCollectionがスコープを必要としないので、あなたは(などの角度ディレクティブ、モジュール、など)コントローラの外Firebaseを使用したい場合は、あなたもこれを使用することができますが、この情報がお役に立てば幸い!

+0

私はあなたの最初の文では "明示的"ではなく "暗黙的"を意味すると思います。 – bennlich

+0

明示的な同期。 .on().set().push()を使用しなくなりました。 – vzhen

+0

ありがとう@bennlich、修正済み! @vzhenいいえ、明示的な同期では 'add()'、 'remove()'、 'update()'のみを使用します。 – Anant

関連する問題