如何唯一地获取推送 ID

How to get push id uniquely

本文关键字:获取 ID 何唯一 唯一      更新时间:2023-09-26

我正在建立一个论坛,我正在浏览。我有这个(简化的)代码:

 //Setting Views
//Adding Them..
$scope.views = $firebaseObject(refService.ref().child("Topics"))
refService.ref().child("Topics").once("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var key = childSnapshot.key();
      var childData = childSnapshot.val();
        if(childData.DateCreated == $stateParams.DATE && childData.Email == $stateParams.EMAIL){
            refService.ref().child("Topics").child(childData.pushKey).child("Views").child(currentAuth.uid).set({
                Views : true
            })
        }
    })
})
//Viewing them
$scope.viewableView = $firebaseObject(refService.ref().child("Topics"))

如您所见,添加视图非常容易。我做对了。问题在于显示视图数量,我必须使用 AngularFire 的$firebaseObject ,或者$firebaseArray......这是数据库中的结构:

{
  "Topics" : {
    "-KG9rDNLZksJDiLfAXwH" : {
      "Avatar" : "http://cs624223.vk.me/v624223037/2b1bb/GRTKddkmXiw.jpg",
      "DateCreated" : 1461544873669,
      "Email" : "abogale2@gmail.com",
      "Title" : "Check",
      "UID" : "3caf2136-7a2d-4ae4-a4a9-119f2b08133c",
      "Username" : "BruhBrhu",
      "Value" : "Check",
      "Views" : {
        "3caf2136-7a2d-4ae4-a4a9-119f2b08133c" : {
          "Views" : true
        }
      },
      "pushKey" : "-KG9rDNLZksJDiLfAXwH"
    }
  },
  "UserAuthInfo" : {
    "3caf2136-7a2d-4ae4-a4a9-119f2b08133c" : {
      "BronzeBadge" : 0,
      "Description" : "Just a wierd 15 year old coder...",
      "Email" : "abogale2@gmail.com",
      "GoldBadge" : 0,
      "Image" : "http://cs624223.vk.me/v624223037/2b1bb/GRTKddkmXiw.jpg",
      "Moderator" : false,
      "Password" : "KfUcQ1yedOi1gEnGP6i1KQ==",
      "PlatinumBadge" : 0,
      "SilverBadge" : 0,
      "UID" : "3caf2136-7a2d-4ae4-a4a9-119f2b08133c",
      "Username" : "BruhBrhu"
    }
  }
}

如您所见,我使用了push(),以获取主题。我现在关心的是如何查看主题!请帮忙!我想不出一个"算法"来做到这一点!

请注意,所有主题都有唯一的 ID。我必须获取用户所在的特定 ID。

这对我有用:

 refService.ref().child("Topics").once("value", function(snapshot) {
                    snapshot.forEach(function(childSnapshot) {
                      var key = childSnapshot.key();
                      var childData = childSnapshot.val();
                      if(childData.DateCreated == $stateParams.DATE && childData.Email == $stateParams.EMAIL){
                            refService.ref().child("Topics").child(childData.pushKey).child("Views").on("value", function(snapshot){
                                console.log(snapshot.numChildren())
                                $scope.countViews = snapshot.numChildren();
                            })
                        }
                    })
                })

我不知道如何,但不知何故$scope.countViews,变成了三向绑定到我的 HTML,所以它实际上显示了!

您将键嵌套在对象中,Firebase 文档明确建议不要这样做。

但是,一旦您意识到还可以将方法添加到范围,它就可以工作:

var app = angular.module('app', ['firebase']);
app.constant('FB_URL', 'https://yours.firebaseio.com/');
app.controller('MainCtrl', function(FB_URL, $scope, $firebaseArray, $firebaseObject) {
  var ref = new Firebase(FB_URL);
  $scope.topics = $firebaseArray(ref.child('Topics'));
  $scope.getCount = function(obj) {
    return Object.keys(obj).length;
  };
});

和观点:

<body ng-controller='MainCtrl'>
  <ol><li ng-repeat='topic in topics'>{{topic.Title}} - {{topic.Username}} - {{getCount(topic.Views)}}</li></ol>
</body>

工作日报:http://jsbin.com/dapoga/edit?html,js,output