如何使用AngularFire将项目添加到列表中项目的特定字典中?

时间:2014-07-25 10:01:14

标签: javascript html angularjs firebase angularfire

以下代码显示了来自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"})

1 个答案:

答案 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。相反,考虑将评论放在他们自己的路径中,将项目放在他们自己的路径中。