以下代码显示了来自firebase的列表,并显示了列表中每个项目的相应注释字段。用户可以对该项目发表评论,它将更新列表中该项目的评论字段。目前,每次发表评论时,它都会覆盖前一条评论,但我希望保存所有评论。
如何制作,以便每次添加评论时,以前的评论都会保存?
http://jsfiddle.net/chrisguzman/PS9J2/
indx.html
<div ng-app="MyApp" ng-controller="MyCtrl">
<div ng-repeat="(id,item) in data">
<h2>{{item.title}}</h2>
<input ng-model="item.comment"></input>
<button type="submit" ng-click="CommentAdd(id)">Comment</button>
</div>
</div>
app.js
angular.module('MyApp', ['firebase'])
.controller('MyCtrl',
function MyCtrl($scope, $firebase) {
var furl = "https://helloworldtest.firebaseio.com";
var ref = new Firebase(furl);
$scope.data = $firebase(ref);
$scope.CommentAdd = function (id) {
$scope.data.$save(id);
};
});
以下是生成的firebase中的数据结构 {helloworldtest: {-JSQhsAnY5zhf0oVKfbb:{title:&#34; nameA&#34;,comment:&#34; Second Comment&#34;}, -JSQhsAnY5zhf0oVKfbb:{title:&#34; nameB&#34;,comment:&#34; Second Comment&#34;}} }
但是,我想创建以下内容,其中有一条评论&#39;包含所有评论的分支。
{helloworldtest:
{-JSQhsAnY5zhf0oVKfbb: {title: "nameA", comments:{-JSQhsAnY5zhf0oVKfbb:{Comment:"Second Comment"},-JSQhsAnY5zhf0oVKfbb:{Comment:"First Comment"}}},
{-JSQhsAnYdfdfdffbb: {title: "nameA", comments:{-JSQhsAnY5zhf0oVKfAb:{Comment:"Another Comment"},-JSQhsAnY5zhf0oVKfbb:{Comment:"First Comment"}}}
}
我试图通过替换
来做到这一点$scope.data.$save(id);
带
$scope.data.$add(id);
我也尝试过使用:
$scope.data[id].$add({foo: "bar"})
答案 0 :(得分:1)
您正在将评论保存到名为comment的字段中。相反,请使用名为评论的列表,并使用push
或$add
。
<div ng-app="MyApp" ng-controller="MyCtrl">
<div ng-repeat="(id,item) in data">
<h2>{{item.title}}</h2>
<input ng-model="newComment"></input>
<button type="submit" ng-click="addComment(id, newComment)">Comment</button>
</div>
</div>
function MyCtrl($scope, $firebase) {
var furl = "https://helloworldtest.firebaseio.com";
var ref = new Firebase(furl+'/items');
$scope.data = $firebase(ref);
var $comments = $firebase( commentsRef );
$scope.addComment = function (id, newComment) {
ref.child(id).child('comments').push(newComment);
};
});
另外Don't nest data just because you can。相反,考虑将评论放在他们自己的路径中,将项目放在他们自己的路径中。