使用Firebase和Angular编辑列表中的特定记录

时间:2015-05-20 20:59:14

标签: angularjs firebase angularfire

我正在尝试允许用户通过单击特定记录旁边的编辑按钮来编辑Firebase中的记录(模式然后显示可编辑的信息)。当我使用下面的代码时,控制台日志显示projectIndex = -1,我认为这意味着无法找到我正在寻找的记录。有关如何修改此代码以访问正确记录的任何建议吗?

.controller('EditProjectCtrl',
  function ($stateParams, Projects, $modalInstance, Auth) {

    var editProject = this;

    if( Auth.$getAuth() === null ) {
      Auth.$authAnonymously({rememberMe: true}).then(init)
       .catch(function(error) {
         console.log('error');
     });
   }
   else {
     init(Auth.$getAuth());
   }

    function init(authData) {
     editProject.projects = Projects(authData.uid);
   }

   var projectId = $stateParams.projectId, projectIndex;
   console.log(projectId) // displays something like this: -JpntT-F7KQe1KlA69uk
   projectIndex = editProject.projects.$indexFor(projectId);
   console.log(projectIndex);
   editProject.project = editProject.projects[projectIndex];
// . . . 
})
.factory('Projects', function(Ref, $firebaseArray) {

  return function(uid) {
   return $firebaseArray(Ref.child('projects').child(uid));
  };
    })

值得一提的是,当我使用本previous Stack Overflow question中的原始代码时,我能够毫无问题地编辑记录(我更新了该代码,因为它导致了身份验证问题)。

1 个答案:

答案 0 :(得分:1)

来自GoogleMock

  

$getRecord(key)

     

返回给定键的数组记录。如果未找到密钥,则返回null。此方法使用$indexFor(key)来查找相应的记录。

我相信您的服务应该有一个retrieveRecord函数来检查记录是否存在。如果你已经有了记录 - 这并不意味着它已经存在了吗?在这种情况下,您应该在工厂中具有编辑功能,然后使用适当的参数从控制器中调用它。

另外,请记住,由于异步性,查询之夜需要与$loaded()函数一起使用。