javascript - AngularFire 检查是否存在相同标题的项目

标签 javascript angularjs firebase angularfire firebase-security

我在 /items 中有 Firebase 条目,其属性为 titlepoints。在输入新项目之前,我试图检查是否存在具有相同 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);
      });
    }

});

最佳答案

实时数据库是一个键/值 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
});

为确保检查在服务器上进行,您可以为其编写安全规则。或者,最好使用新的 Bolt Compiler .

{
  "items": {
     "$item": {
       ".write": "!data.exists()" // don't overwrite existing data
     }
   }
}

你应该升级你的 AngularFire 版本。我注意到你正在使用 $firebase().$asArray 这意味着你在 0.9 版本的 AngularFire,不受支持。考虑升级到 Firebase 官方支持的 1.0+ 版本。

关于javascript - AngularFire 检查是否存在相同标题的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33884296/

相关文章:

javascript - 提供程序 'Task' 必须从 $get 工厂方法返回一个值

javascript - 单击超链接后在同一页面显示对象

ios - 在 AngularJS 应用程序中使用 html input type=search 在 iOS 键盘上显示搜索按钮

android - 如何在 flutter 的 firestore 中使用 uid 更新用户数据

node.js - 在云函数中处理 HTTP 请求时读取 ECONNRESET 错误

javascript - 正则表达式拆分 iif 表达式

javascript - 在激活验证之前查找 jQuery Accordion 中的元素

javascript - 如何获取 Angular 资源返回的数组的第一个元素?

javascript - 选择未使用 ng-model 选择正确的选项

javascript - 'firebase' 未定义 - Vue.js