Firebase 中的动态数组

Dynamic Arrays in 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。我无法对 link 进行硬编码,因为我想增加任何对象的计数,而不仅仅是一个。

Is it really not supported?

考虑到我们在这里谈论的是软件,这不太可能。文档更有可能让您感到困惑。如果您展示您尝试过的一些东西,那么帮助会容易得多。

举个简单的例子,假设您有一个包含项目列表的数据库:

var ref = new Firebase('https://yours.firebaseio.com');
var itemsRef = ref.child('items');

现在您向此列表中添加一个新项目:

var newItemRef = ref.push();
newItemRef.set({ name: 'New Item', user: 'Jacob Dick', timestamp: Firebase.ServerValue.TIMESTAMP });

然后您可以更改该项目的单个 属性:

newItemRef.update({ user: 'Frank van Puffelen' });

事实证明它没有列在文档中。至少,根本不是在前面。但是,当您访问数据库中数组中的项目时,它会附带您为其提供的所有常规属性(例如 firstNamelastName 等。所有常规属性)精彩的id属性。 id 是您将项目添加到数组时获得的时间戳。

一旦你得到 id(时间戳),你就可以用它来引用你的项目(因为你对数据库的所有引用都是通过 URL 完成的)。所以你可以结束说...

var ref = new Firebase(https://myApp.firebaseio.com/users/);
// ref now holds the string that is your URL

$scope.users = $firebaseArray(ref);

// 'user' can be passed in through $scope
$scope.updateUserName = function (user) {

    var userRef = new Firebase(ref + user.$id);
    // userRef now holds the string that is the URL to your user that you just passed in

    // don't be scared to use dynamic, client-facing variables instead of hard-coding this. It works.
    userRef.update({ firstName: 'Jacob' });
};

所以,是的。它是受支持的。而且文档可能对新手更友好。不需要都是精英。