Angularjs 使用Firebase和Angular从列表编辑特定记录

Angularjs 使用Firebase和Angular从列表编辑特定记录,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我试图允许用户通过单击特定记录旁边的编辑按钮来编辑他们在Firebase中的记录(然后模式显示可编辑信息)。当我使用下面的代码时,控制台日志显示projectIndex=-1,我认为这意味着找不到我要查找的记录。关于如何修改此代码以访问正确记录有何建议 .controller('EditProjectCtrl', function ($stateParams, Projects, $modalInstance, Auth) { var editProject = this;

我试图允许用户通过单击特定记录旁边的编辑按钮来编辑他们在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));
  };
    })
值得一提的是,当我在这篇文章中使用原始代码时,我能够毫无问题地编辑记录(我更新了该代码,因为它会导致身份验证问题)。

来自:

$getRecord(键)

从数组中返回给定键的记录。如果找不到密钥,则返回
null
。此方法利用(键)的
$indexFor查找适当的记录

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


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

只是一个旁注:这是完整的代码还是它的一部分?我这样问是因为控制器声明没有关闭。@Sinan Bollel感谢您指出这一点。这只是代码的一部分。我刚刚编辑了这篇文章来结束声明。无法对从服务器异步下载的数据同步调用console.log()。还有,这有什么意义?如果你想要一条特定的记录,为什么不干脆要一条,而不是把它们全部下载下来,试着挑选出来呢<代码>$firebaseObject(ref.child($stateParams.projectId))
为什么editProject中有这么多复杂的赋值和复制?吻FTW。@Kato谢谢你的澄清。有这么多复杂的赋值和复制,因为我还在学习角度(显然还有很长的路要走…)。我试图使用Angular网站第一页上的代码作为示例。我将使用您建议的代码。顺便说一句,我注意到上面有一个小的打字错误。“所以不必担心它何时可用”的最后一部分应该是“…它何时可用”接受建议。是的,记录在那里。但是我的代码是错误的,因为它找不到这些记录。因此,
projectIndex=-1
console.log(editProject.projects)
显示包含该用户记录的数组,但我使用的代码在该数组中找不到相关记录。