2017-02-27 60 views
0

我無法弄清楚如何使用基於id的Firebase讀取和更新。在這種情況下,我有一個todos列表,我想根據它的$ id找到第一個項目,然後將comple更改爲true。

todos 
    -Ke0JWl9xy5sZvT55hfE 
     Complete: false 
     Created_at: 1488228401479 
     Description: "123" 
     Priority: "high" 
    -Ke0Ms_LnsO-TSwQZLcZaddclose 
    -Ke0MuWCLkX29XWYyPBM 
    -Ke0MwKOrjpDm9rj6L28 
    -Ke0NCmpM3_dTPtY9jVb 

JS

(function() { 
    function Todo($firebaseArray) { 
    var ref = firebase.database().ref().child("todos"); 
    var todos = $firebaseArray(ref); 

    Todo.todos = todos; 
    Todo.updateToDo = function(todo){ 
     console.log(todos) 

     console.log(todos[todo['$id']]) 
    }; 
    return Todo; 
    } 

    angular 
    .module('blocitoff') 
    .factory('Todo', ['$firebaseArray', Todo]); 
})(); 

回答

0

我會採取一個更簡單的方法:

(function() { 
    function Todo($firebaseArray) { 
    var ref = firebase.database().ref().child("todos"); 
    var todos = $firebaseArray(ref); 

    Todo.todos = todos; 
    Todo.updateToDo = function(todo){ 
     ref.child(todo['$id']).update({ completed: true }); 
    }; 
    return Todo; 
    } 

    angular 
    .module('blocitoff') 
    .factory('Todo', ['$firebaseArray', Todo]); 
})(); 

update()調用這裏使用的JavaScript火力地堡的SDK。但是由於AngularFire是建立在此之上的,所以它們完美地交互操作。

+0

謝謝!這工作。這是相關的,那麼如何基於'$ id'返回那個對象呢?當我嘗試使用console.log(ref.child(todo ['$ id']));',它只是返回U {u:Te,路徑:L,m:ee,Nc:false,則:未定義...}'。我的目標是進入「描述」。 – Leogoesger

+0

該代碼只是設置了一個引用。它沒有檢索任何值。要學習如何在沒有AngularFire的情況下從JavaScript訪問數據庫,我建議:https://firebase.google.com/docs/database/web/start –