在文档中,我看到很多示例使用索引值作为特定项的键名的一部分---但我不明白这是如何对数据进行建模的一致方法。
例如,假设我有一个文章列表:
https://gigablox.firebaseio.com/articles/
article1
article2
article3
当我准备添加article4
时,我知道我可以使用:
var length = Object.keys($scope.articles).length;
使用 AngularFire 0.5.0 我可以保存:
var name = 'article' + length + 1;
$scope.articles[name] = $scope.article;
$scope.articles.$save(name);
但是如果我:
会发生什么$scope.articles.$remove('article2');
使用相同的方法添加另一条记录? 我们可能会创建重复的密钥名称。
为了增加一点复杂性,让我们添加一个关系,并说每个文章都有comments
。
在Firebase集合中对此数据建模的正确方法是什么?
答案 0 :(得分:3)
请使用$add
并让Firebase自动为您生成按时间顺序排列的列表。
var ref = new Firebase("https://gigablox.firebaseio.com/articles/");
$scope.articles = $firebase(ref);
$scope.addArticle = function() {
$scope.articles.$add($scope.article);
}
$scope.removeArticle = function(id) {
$scope.articles.$remove(id);
}
当您致电$add
时,Firebase会自动创建密钥名称。您可以使用ng-repeat
迭代密钥名称:
<div ng-repeat="(key, article) in articles">
<div ng-model="article"><a ng-click="removeArticle(key)">Remove</a></div>
</div>
答案 1 :(得分:0)
编辑:如果你想要一个基于数组的集合,你应该遵循@Anant的建议。
但是,对于@Dan Kanze概述的这种特定场景,如果你想从URL中提取密钥(就像对内容管理系统那样做),你应该生成自己的密钥。内容。例如,如果您知道文章名称必须是唯一的,请创建一个slug函数:
如果文章名称发生更改,则不会删除旧条目。而是在Firebase中创建一个新条目,并使用旧密钥指向301重定向的新位置等。