2016-04-25 115 views
0

我正在建立一个论坛,并且我正在观看。我有这个(简体)代码:如何获得唯一的推送ID

//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" : "[email protected]", 
     "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" : "[email protected]", 
     "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。

+0

你已经在你的问题中包含了JSON树的图片。请将实际的JSON替换为文本,您可以通过点击Firebase数据库中的导出按钮轻松获取该文本。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –

+0

任何人都可以?或者这是一个不可能完成的任务@FrankvanPuffelen? – amanuel2

回答

1

这个工作对me:

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,所以它实际上显示!

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