我正在尝试允许用户通过单击特定记录旁边的编辑按钮来编辑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中的原始代码时,我能够毫无问题地编辑记录(我更新了该代码,因为它导致了身份验证问题)。
答案 0 :(得分:1)
来自GoogleMock:
$getRecord(key)
返回给定键的数组记录。如果未找到密钥,则返回
null
。此方法使用$indexFor(key)
来查找相应的记录。
我相信您的服务应该有一个retrieveRecord
函数来检查记录是否存在。如果你已经有了记录 - 这并不意味着它已经存在了吗?在这种情况下,您应该在工厂中具有编辑功能,然后使用适当的参数从控制器中调用它。
另外,请记住,由于异步性,查询之夜需要与$loaded()
函数一起使用。