我对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>
这是处理这种情况的正确方法吗? 怎么说我的控制器只显示现有的注释?
答案 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();