如何计算angularfire中的子元素



嗨,我正在使用angularfire为我的应用程序我在这里列出我的服务和控制器。我计划得到已添加到一个特定的帖子评论的计数。这是我的控制器

    app.controller('PostViewCtrl', function ($scope,                          
     FIREBASE_URL,$routeParams,  
     Post, Auth, $timeout,$interval,$http, $rootScope, $firebase) {
    var ref = new Firebase(FIREBASE_URL);
    $scope.post = Post.get($routeParams.postId);
    $scope.comments = Post.comments($routeParams.postId);

      $scope.user = Auth.user;
      $scope.signedIn = Auth.signedIn;

            $scope.addComment = function () {
         if(!$scope.commentText || $scope.commentText === '') {
         return;
           }
           var Commentcreatedtime = moment().format('llll');
           $scope.CommentcreatedTime = Commentcreatedtime;
      var comment = {
  createdTime:  $scope.CommentcreatedTime,
  text: $scope.commentText,
  creator: $scope.user.profile.username,
  creatorUID: $scope.user.uid,
  creatorpic: $scope.user.profile.userpic,
  commentimage: $scope.object.image.info.uuid
};

$scope.comments.$add(comment);


$scope.commentText = '';
$scope.object.image.info.uuid = '';
   };
    });

这是我的服务

   'use strict';
   app.factory('Post', function($firebase,FIREBASE_URL){
   var ref = new Firebase(FIREBASE_URL);
    var posts = $firebase(ref.child('posts')).$asArray();
     var Post = {
    all: posts,
    create: function(post){
    return posts.$add(post).then(function(postRef){
        $firebase(ref.child('user_posts').child(post.creatorUID))
                    .$push(postRef.name());
        return postRef;
     });
      },
     get: function(postId){
    return $firebase(ref.child('posts').child(postId)).$asObject();
     },
      delete: function(post){
    return posts.$remove(post);
       },
   comments: function(postId){
     return $firebase(ref.child('comments').child(postId)).$asArray();
       }
      };
        return Post;
      });

我已经尝试使用事务来更新addComment事件上的计数器,像这样

   $scope.comments.$add(comment, function(error) {
    if (!error) {
     $firebase(ref.child('comments').child(postId)
     .child('commentcount')).transaction(function (count) {
      return count + 1;
    });
     }
    });

,但这不会创建comments的子节点——postId,也没有计数器。请一定要帮助我。我是新的firebase和角和您的帮助将非常感激。

您使用的是旧版本的AngularFire。请更新到最新版本。虽然它可能对你发布的问题没有什么影响,但它会让AngularFire专家更容易做出回应(因为最新版本的文档最容易找到)。

如果我忽略其他所有内容,这是您更新帖子评论数的代码。

$firebase(ref.child('comments').child(postId)
 .child('commentcount')).transaction(function (count) {
  return count + 1;
});

我不认为AngularFire包装了transaction方法。即使有,我也不会用AngularFire。AngularFire提供了一个从Firebase的常规JavaScript SDK到AngularJS前端的绑定。计数注释不是前端功能,所以我会坚持使用JavaScript SDK。显示评论数是前端功能,所以我会用AngularFire服务将其绑定到$scope

现在对于实际代码:

var countRef = ref.child('comments').child(postId) .child('commentcount');
countRef.transaction(function (count) {
  return (count || 0) + 1;
});

请注意,最后这段代码是transaction的Firebase文档的一个相当字面的副本。一个稍微易读的版本是:

var countRef = ref.child('comments').child(postId) .child('commentcount');
countRef.transaction(function (count) {
  if (!count) {
    // if count does not exist, we apparently don't have any comments yet
    count = 0;
  }
  count = count + 1;
  return count;
});

相关内容

  • 没有找到相关文章

最新更新