2016-07-07 34 views
2

这是我的尝试,但它返回undefined,但我想这不能没有钥匙作为.child(keys)或这种性质的东西。如何通过Firebase中的按键读取项目?

var ref = new Firebase("https://users.firebaseio.com/"); 
ref.child("users").child(authData.uid).on("value", function(snapshot) { 
    var users = snapshot.val(); 
    console.log("snap: " + snapshot.val()); 
    console.log("username: " + users.username); 
    console.log("username: " + users.email); 
}); 

这是我的firebase json文本。我想通过许多按键读取电子邮件的姓氏和用户名,而不仅仅是按键。

"users": { 
    "6179eb29-9691-4828-be5a-28a94e84703b": { 
    "-KLWoGzjymD0Sgvf5Rcs": { 
     "email": "[email protected]", 
     "lastname": "cater", 
     "username": "jay" 
    } 
    }, 
    "6a210785-0a73-4c83-b3e1-d3828f9d8a3b": { 
    "-KLqMiLTB71dTh7PrVpL": { 
     "email": "[email protected]", 
     "lastname": "john", 
     "username": "smith" 
    } 
    } 
+0

嘿木子,让和我知道如果我的回答帮你,如果你还有任何疑问。谢谢。 – adolfosrs

+0

我能用.child(键)看下面的答案..... –

回答

0

taskref.onAuth(function(authData) { 
 
     taskref 
 
     .child("users") 
 
     .child(authData.uid) 
 
     .child("task") 
 
     .orderByChild('date') 
 
     .on('value', function(snapshot) { 
 
      $scope.list = []; 
 
      snapshot.forEach(function(child) { 
 
      // $scope.list = $scope.list.concat(child.val()); 
 
      $scope.list.splice(0, 0, child.val()); 
 
      console.log($scope.list); 
 
      }); 
 

 
      $scope.taskKeys = function() { 
 
      return Object.keys($scope.list); 
 
      } 
 

 
      $scope.complete = function(key) { 
 
      taskref.child("users") 
 
       .child(authData.uid) 
 
       .child('task') 
 
       .child(key) 
 
       .set({ 
 
       status: true 
 
       }); 
 
      } 
 

 
     });

+0

我回答了这个问题,所以通过使用“Object.keys”可以将特定的键传递给我的函数,然后传递给我的子节点。 –

0

您尚未在任何地方定义您的Firebase项目。 我认为你必须这样使用。

<script> 
// Initialize Firebase 
var config = { 
    apiKey: "your_api_key", 
    authDomain: "project-0000000000000000.firebaseapp.com", 
    databaseURL: "https://project-0000000000000000.firebaseio.com", 
    storageBucket: "project-0000000000000000.appspot.com", 
}; 
firebase.initializeApp(config); 
var ref= firebase.database().ref(); 
ref.child("users").child(authData.uid).on("value", function(snapshot) { 
var users = snapshot.val(); 
console.log("snap: " + snapshot.val()); 
console.log("username: " + users.username); 
console.log("username: " + users.email); 
}); 
</script> 
+0

我其实想知道如果这可以做如何通过ref.child('钥匙')读取“用户”)。child(authData.uid).on(“value”,函数(快照) –

+0

对我不清楚... 能否请你多解释一下..? –

+0

是否可以通过名称ref.child(“users”)。child(authData.uid).child('name');而不必在调用检索名时提供像.child(“ - KLWoGzjymD0Sgvf5Rcs”)这样的关键值对 –

0

您正在寻找orderByChildequalTo结合。

ref.child("users").orderByChild("username").equalTo("smith").on("value", function(snapshot) { 
    var users = snapshot.val(); 
    console.log("snap: " + snapshot.val()); 
    //loop over the found results 
    snapshot.forEach(function(user){ 
     console.log(user); 
    }); 
}); 

在你的代码片段中,你正在使用传统的sdk初始化你的ref。新的firebase sdk已经改变了一点点。

firebase.initializeApp(config); 
var ref= firebase.database().ref(); 

另外,请记住,您将无法使用多个orderByChild来查询多个子参数。在这种情况下,this question会给你一些关于如何处理它的想法。

相关问题