【问题标题】:How to count child elements in angularfire?如何计算angularfire中的子元素?
【发布时间】:2015-07-12 06:35:09
【问题描述】:

您好,我正在为我的应用程序使用 angularfire 我在这里列出我的服务和控制器。我计划获取已添加到特定帖子的 cmets 计数。这是我的控制器

    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;
    });
     }
    });

但这不会为 cmets 创建一个子节点 -- postId 也没有计数器。请帮帮我。我是 firebase 和 angular 的新手,非常感谢您的帮助。

【问题讨论】:

    标签: angularjs firebase angularfire


    【解决方案1】:

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

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

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

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

    现在是实际代码:

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

    请注意,最后一个 sn-p 是来自 Firebase documentation for transaction 的一个相当文字的副本。一个更易读的版本是:

    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;
    });
    

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 2011-03-09
      • 2014-11-05
      • 2021-03-23
      • 2011-05-16
      • 2016-05-19
      • 1970-01-01
      • 2016-05-26
      • 2011-04-11
      相关资源
      最近更新 更多