AngularFire проверить, существует ли элемент с таким же названием
У меня есть записи Firebase в /items
со свойствами title
и points
. Я пытаюсь проверить, существует ли элемент того же title
, прежде чем вводить новый.
Вот что у меня есть, но этого не происходит:
app.controller('ItemController', function($scope, FURL, $firebase, $location, toaster) {
var ref = new Firebase(FURL);
var fbItems = $firebase(ref.child('items')).$asArray();
$scope.addItem = function(item) {
// var iItem = $scope.item.title;
var userId = $scope.item.title;
checkIfUserExists(userId);
};
function userExistsCallback(userId, exists) {
if (exists) {
alert('user ' + userId + ' exists!');
} else {
alert('user ' + userId + ' does not exist!');
}
}
function checkIfUserExists(userId) {
ref.child('items').once('value', function(snapshot) {
var exists = (snapshot.val() !== null);
userExistsCallback(userId, exists);
});
}
});
1 ответ:
База данных реального времени-это база данных ключа/значения JSON. Это означает, что Если вы сохраняете имя заголовка в качестве ключа , то его поиск будет очень быстрым.
Возьмем для примера следующие данные.
{ "items": { "title-1": { "something": "foo" }, "title-2": { "something": "baz" } } }
Теперь предположим, мы хотим проверить, чтобы увидеть, если
title-2
Существует. Мы можем сделать это с легким чтением.Чтобы убедиться, что проверка происходит на сервере, вы можете написать для него правило безопасности . Или, еще лучше, использовать новый Болт Компилятор.function checkForTitle(title, cb) { var itemsRef = new Firebase('<my-firebase-app>/items'); var titleRef = itemRef.chld(title).once('value', function(snap) { cb(snap.exists()); }); } checkForTitle('title-2', function(doesExist) { console.log(doesExist); // true });
{ "items": { "$item": { ".write": "!data.exists()" // don't overwrite existing data } } }
Вам следует обновить версию AngularFire.Я заметил, что вы используете
$firebase().$asArray
, что означает, что вы находитесь на версии0.9
AngularFire, которая не поддерживается. Посмотрите на обновление до версии1.0+
, которая официально поддерживается Firebase.