2016-02-25 71 views
0

我试图将对象保存到Firebase。我可以读取对象,它的属性可以,但不能保存。错误回调结果 - >错误:无效记录;可以确定未定义的关键。AngularFire无法保存对象

   var ref = new Firebase("https://myapp.firebaseio.com/myObjects/" + objectKey) 
      var obj = $firebaseObject(ref); 

      obj.$loaded().then(function() { 

       console.log("Some property -> " + obj.testProperty); 

       obj.testProperty= "someValue"; 

       obj.$save().then(function (ref) { 
        console.log("Saved !"); 

       }, function (error) { 
        console.log("Error:", error); 
       }); 

      }); 

我不能看到我做错了什么......

问候

+0

只是要清楚,你看到控制台日志中的正确值? console.log(“Some property - >”+ obj.testProperty);那给你看你期待的价值? – Kyle

+0

将该行更改为console.log(“这是对象 - >”+ JSON.stringfy(obj)),并在我的控制台 - > [{“$ value”:1,“$ id”:“codigoDoCliente “,”$ priority“:null},{”$ value“:”人名“,”$ id“:”criadoPor“,”$ priority“:null},{”$ value“:”20160225“,” $ id“:”dataDaOcorrencia“,”$ priority“:null},{”$ value“:”一些信息...“,”$ id“:”descricaoDaOcorrencia“,”$ priority“:null},{”$值“:4,”$ id“:”produtoAssociado“,”$ priority“:null},{”$ value“:1,”$ id“:”tipoDeOcorrencia“,”$ priority“:null}]。 – GCoe

+0

请不要添加代码来评论,[编辑](http://stackoverflow.com/posts/35638033/edit)你的问题,包括它。 –

回答

0

$保存不会自动生成一个键,以便有没有可能你已经存储重复objectKey 。

通常我们将所有数据存储在唯一标识符下,如用户标识或随机散列,以避免冲突。或者您可以使用$ add,Firebase会自动生成一个唯一密钥并将其存储在该位置下。 firebaseURL /个人资料/唯一身份证/对象

+0

我试图保存的对象不是一个新对象,它正在从服务器上先前保存的数组进行编辑。 – GCoe

0

我刚刚遇到此问题。矿井是由具有未定义的函数参数引起的。我无意中包含了从我复制和粘贴的另一个服务中的参数,而没有将该服务添加为依赖项。 如:

angular 
    .module('appTasks', []) 
    .factory('tasks', [ 
    '$firebaseObject', 
    '$firebaseArray', 
    function(users, $firebaseObject, $firebaseArray) { ...my service code... },]); 

users参数是为了来自我不包括.module依赖阵列[]的依赖,所以这是不确定的,脱掉我的整个服务,这给了我这个错误:“错误:无效的记录;可能确定未定义的关键。“

我是一个新手,所以任何人都可以随时让我知道,如果我可以更好地描述一个特定的方式。 ;)

1

您需要先获取数组索引,然后保存一些属性。

var ref = new Firebase("https://myapp.firebaseio.com/myObjects/"); 
    var obj = $firebaseArray(ref); 
    var index = obj.$indexFor(objectKey) 
    obj.$loaded().then(function() { 

     console.log("Some property -> " + obj.testProperty); 

     obj[index].testProperty= "someValue"; 

     obj.$save(index).then(function (ref) { 
      console.log("Saved !"); 

     }, function (error) { 
      console.log("Error:", error); 
     }); 

    });