Firebaseを使用すると、簡単にアレイを作成できますが、読み込み専用となっています。私は、自分のオブジェクトの配列を持ち、更新したり、属性の一部を変更したりできます。Firebaseのダイナミックアレイ
Firebaseの配列は、タイムスタンプをキーとして作成されるという問題があります。 FirebaseのすべてがURLであり、URLに入れるキーはありません。
私はAngularFireとFirebaseを使用しています。
.controller('LinkCtrl',[ '$scope', '$firebaseArray', '$firebaseObject', '$log', function ($scope, $firebaseArray, $firebaseObject, $log) {
var ref = new Firebase('https://candyman.firebaseio.com/links');
$scope.links = $firebaseArray(ref);
$scope.addLink = function() {
// newly added
var newLinkRef = ref.push();
newLinkRef.set({ name: $scope.newLinkName, url: $scope.newLinkUrl, downloadCount: 1, timestamp: Firebase.ServerValue.TIMESTAMP });
// !newly added
$scope.newLinkName = '';
$scope.newLinkUrl = '';
$log.info($scope.newLinkName + ' added to database');
};
私の目標は、その後、いくつかの後の期間で特定のオブジェクトのdownloadCount
を変更する機能を呼び出すことができる、私の配列に格納されたオブジェクトを作成することです。リンクをハードにコーディングすることはできません。なぜなら、1つではないオブジェクトの数を増やしたいからです。
コードを追加しました。タイムスタンプの代わりに自分のキーを使用できるようにしたい、 *または*何らかの形でそのタイムスタンプにアクセスし、そのオブジェクトへの直接リンクを得ることができます。私は 'key()'と 'set()'を見ましたが、私はそれらが読み取り専用の配列や、ハードリンクを作ることができる配列ではないオブジェクトのいずれかについて文書化されているようです。 – Jacob
Firebaseには読み取り専用配列はありません。 AngularFireの '$ firebaseArray()'は自動的に同期化された配列です。その配列を変更することができます([docs](https://www.firebase.com/docs/web/libraries/angular/guide/synchronized-arrays.html#section-modifying-the-array)を参照)データベースは直接(上記の私のコードのように)。 AngularFireはFirebase JavaScript SDKの上に構築されているため、完全に相互運用できます。 –
あなたが提案したコードを追加しましたが、データベース内の単一のオブジェクトを参照する方法がまだ分かりません。以下は、データベースからオブジェクトを削除する際のドキュメントの例です: 'messages $ remove(someRecordKey);'。同じページにメッセージを変更する例がありました。特定のオブジェクトに対してレコードキーを取得するにはどうすればよいでしょうか?タイムスタンプは 'timestamp'の下に保存されましたが、書き留めませんでした。私は別の何かによってそれを呼び出すことができますか? – Jacob