我想使用他们的电子邮件地址作为密钥来索引数据存储中的客户,以强制实现唯一性。
我按如下方式初始化我的连接:
var ref = new Firebase("https://[myApp].firebaseio.com/");
$scope.customers = $firebase(ref.child("customers")).$asArray();
这是我的控制者:
function customerCtrl($scope) {
$scope.addNewMember = function (firstName, lastName, email) {
$scope.customers.$add({
firstName: firstName,
lastName: lastName,
email: email
});
}
}
当然,这会生成一个像-Jbd4KJ_CrFqlpnqbGVu
这样的唯一键。有没有办法手动设置密钥,以便我的数据看起来像这样?
{
'bob.smith@example.com': {
firstName: 'Bob',
lastName: 'Smith'
},
'jane.doe@example.com': {
firstName: 'Jane',
lastName: 'Doe'
},
...
}
或者,我是否以错误的方式思考这个问题?
答案 0 :(得分:1)
如果您使用已知的密钥处理特定路径,则不需要集合(使用$ asArray)。在这种情况下,您可能会直接使用Firebase参考。
var ref = new Firebase("https://[myApp].firebaseio.com/");
$scope.customers = $firebase(ref.child("customers")).$asArray();
$scope.addNewMember = function(firstName, lastName, email) {
var escapedEmail = escapeEmailAddress(email);
ref.child('customers/'+escapedEmail).set({firstName: firstName, lastName: lastName, email: email});
};
function escapeEmailAddress(email) {
return (email||'').replace(/\./g, ',');
}
数据将自动实时同步到$ scope.customers中。
如果您通过synchronized数组设置此操作,则手动声明$ id并使用$ save代替:
$scope.addNewMember = function (firstName, lastName, email) {
var rec = {
firstName: firstName,
lastName: lastName,
email: email,
$id: escapeEmailAddress(email)
};
$scope.customers.push(rec);
$scope.customers.$save(rec);
};