在循环中显示两个表

时间:2014-11-04 15:40:55

标签: angularjs firebase

我对AngularJS很陌生。 我将它与firebase一起使用。

我有一组像这样的数据:

"userId1" : {
  "name" : "Bobby",
  "comments" : {
    "-J_v90hh5sbJ2acmX4nq" : true
  }
}

和评论列表

"-J_v90hh5sbJ2acmX4nq" : {
  "creation_date" : 1415110466568,
  "creator_id" : "userId1",
  "desc" : "dsqdsq",
  "type" : "suggest"
}

所以我想要的是显示我们朋友Bobby的所有评论。

.controller('CommentsCtrl', function($scope, $firebase){

  var creator_id = 'userId1'; // Test purpose
  var userCommentsRef = new Firebase("https://awesome.firebaseio.com/users/"+creator_id+'/comments');
  var commentsRef = new Firebase("https://awesome.firebaseio.com/comments");


  var userCommentsSync = $firebase(userCommentsRef);
  var commentsSync = $firebase(commentsRef);

  var userComments = userCommentsSync.$asObject();
  var comments = commentsSync.$asObject();

  $scope.userComments = userComments;
  $scope.comments = comments;

})

你知道我应该如何继续这个显示,但是要确保如果删除了评论(并且密钥仍然存在),那么描述将不会显示?

   <ion-list ng-controller="CommentsCtrl">
        <ul class="list">

            <li class="item item-checkbox item-checkbox-right" ng-repeat="(key,item) in userComments">

             {{comments[key].desc}} // Working, but don't want deleted comments 

            </li>

        </ul>
    </ion-list>

这是处理这种情况的正确方法吗? 怎么说我的控制器只显示现有的注释?

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式在ng-repeat块中使用过滤器:

<li ng-repeat="(key,item) in userComments | filter:{deleted:false}">
    {{comments[key].desc}} // Working, but don't want deleted comments 
</li>

或者,如果存储在评论对象中的信息使用ng-if

<li ng-repeat="(key,item) in userComments | filter:{deleted:false}" ng-if="!comments[key].deleted">
    {{comments[key].desc}} // Working, but don't want deleted comments 
</li>

答案 1 :(得分:1)

不,这不是正确的方法。使用馆藏时,请使用$asArray代替$asObject。来自the guide

同步数组应该用于任何将被排序,迭代和具有唯一ID的对象列表。

对象对于存储键/值对以及未用作集合的单个记录非常有用。

此外,无需删除参数。您只需从用户索引中删除已删除的注释即可。然后,如果它存在于该列表中,则不会将其删除。不需要额外的过滤功能。

也就是说,您可能还想查看new query parameters。有了这些,并且轻微的数据结构发生了变化,您可以匹配deleted属性等于false的项目,而不是在Angular中对客户端进行排序。

所有在一起:

var fbRef = new Firebase("https://awesome.firebaseio.com/");

var userCommentsRef = 
    fbRef.child("users" + creator_id + "/comments")
    .orderBy('deleted')
    .startAt(false)
    .endAt(false);

$scope.userComments = $firebase(userCommentsRef).$asArray();