如何获得唯一的推送ID

时间:2016-04-25 00:51:18

标签: javascript angularjs firebase angularfire

我正在建立一个论坛,而我正处于观点的一步。我有这个(简化的)代码:

 //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。

2 个答案:

答案 0 :(得分:1)

这对我有用:

 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绑定的三种方式,所以它实际上显示了!

答案 1 :(得分:0)

您正在将键嵌套在对象Firebase documentation explicitly recommends against

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

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>

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